首先,我不知道我说的问题是否正确。下面我将试着解释一下我的情况,我有一个方法。
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
方法将被调用,它将停止缩放。基本上,计划是
FocusTargetZoom
方法从 来电者;然而我不知道这种问题的方法是否正确。如果你有一些见解,请与我分享
一个 event
是发生和 触发器 别的 听力 到它。所以一个 event
拥有 听众 而非 来电者.
你使用的是 Action
在这里(一个void委托基本上是一个Action),而不是一个 event
.
为了达到您想要的效果,您需要一个 核对 看看你的目标是否仍然有效,所以你需要一个 delegate
的东西(如 Func<bool>
).
这 Func<bool>
的时候,需要返回false。OnTriggerExit
. 另外,你需要通过这个 Func<bool>
对正在进行聚焦的方法(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(); }
}
}
而调用者MonoBehaviour要求是这样的。
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;
}