C# 将事件作为参数传递的正确方法是什么?
首先,我不知道我是否正确地陈述了这个问题。我将在下面解释我的情况。 我有一个方法:C# 将事件作为参数传递的正确方法是什么?,c#,unity3d,C#,Unity3d,首先,我不知道我是否正确地陈述了这个问题。我将在下面解释我的情况。 我有一个方法: public void FocusTargetZoom(Transform target, float focusTime, float zoomFactorPercentage, OnStopFocusing onStopFocusing
public void FocusTargetZoom(Transform target,
float focusTime,
float zoomFactorPercentage,
OnStopFocusing onStopFocusing = null,
bool lockMovement = true)
{
if (lockMovement)
{
Character.Instance.LockMovement();
}
if(onStopFocusing != null)
{
//StopFocusing = onStopFocusing;
}
zoomFactor = initFOV * zoomFactorPercentage / 100f;
FocusOnTarget(target, focusTime);
}
其中,OnStopFocusing
是我的委托无效。此FocusTargetZoom
方法将从任何其他对象调用,例如具有OnTriggerEnter
和OnTriggerExit
事件的对象。现在,我要做的是将OnTriggerExit事件传递给FocusTargetZoom
方法,这样每当调用我的OnTriggerExit
方法时,它都会停止缩放。基本上,计划是:
但我不确定这是否是解决此类问题的正确方法。如果你有一些见解,请分享 一个
事件
是发生的事情,触发了另一件事,倾听它。因此,事件
有一个侦听器,而不是调用者
这里使用的是操作
(无效委托基本上是一个操作),而不是事件
要获得所需的结果,您需要进行检查以查看您的目标是否仍然有效,因此您需要一个委托
,该委托返回一些内容(例如函数
)
当我们有OnTriggerExit
时,这个Func
需要返回false
此外,您还需要将此Func
传递给正在进行聚焦的方法(FocusOnTarget
)
public void FocusTargetZoom(Transform target, float focusTime, float zoomFactorPercentage, Func<bool> whenToStopFunc, bool lockMovement = true)
{
if (lockMovement)
{
Character.Instance.LockMovement();
}
StopFocusing = whenToStopFunc;
zoomFactor = initFOV * zoomFactorPercentage / 100f;
FocusOnTarget(target, focusTime, whenToStopFunc);
}
private void FocusOnTarget(Transform target, float focusTime, Func<bool> whenToStopFunc)
{
while(notYetFocused)
{
if(whenToStopFunc != null && !whenToStopFunc())
{ KeepFocusing(); }
}
}
public void Caller : MonoBehaviour
{
bool isSelected = false;
void IsThisSelected() => isSelected;
private CallTheFocus() => _focusClass.FocusTargetZoom(transform, 1f, 1f, IsThisSelected);
private void OnTriggerEnter() => isSelected = true;
private void OnTriggerExit() => isSelected = false;
}