C# 在StateMachineBehaviour脚本中创建事件的更好方法(Unity)
我想在C# 在StateMachineBehaviour脚本中创建事件的更好方法(Unity),c#,unity3d,state,behavior,C#,Unity3d,State,Behavior,我想在StateMachineBehaviour上使用事件,而不是使用bool参数。但我在使用委托事件时遇到问题 public class DeficateState : StateMachineBehaviour { public delegate void DeficateEvent(); public static event DeficateEvent OnPoop; public static event DeficateEvent OnPee; override public vo
StateMachineBehaviour
上使用事件,而不是使用bool
参数。但我在使用委托事件时遇到问题
public class DeficateState : StateMachineBehaviour {
public delegate void DeficateEvent();
public static event DeficateEvent OnPoop;
public static event DeficateEvent OnPee;
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
if (!update) return;
if (times > IdleTime)
{
update = false;
times = 0;
if(animator.GetInteger("IdleIndex") == 0){
if (OnPoop != null)
OnPoop();
}else{
if (OnPee != null)
OnPee();
}
}
times += Time.deltaTime;
}
我可以手动取消订阅。当我不小心遗漏了一些错误时,会出现诸如“m_Animator已被销毁,但您正在尝试访问…”之类的错误,这让我花更多的时间来检查代码。
如果不使用委托事件,是否有更有效、更好的方法在
StateMachineBehaviour
上使用事件?你所说的unity不取消委托事件是什么意思?你需要手动取消订阅,但你可以取消订阅。你只是问“我如何做UnityEvent”?是的,我可以手动取消订阅,但当错误增加时,它会变得更复杂,当我错过某个事件时,我会花更多时间查看代码。我想UnityEvent可以。你会犯什么样的错误?关于您当前的代码,您应该为来自未订阅事件的两个不同事件错误创建两个不同的委托(“m_animator已销毁,但您正在尝试访问…”)。简单地取消订阅就可以了。当它变得更复杂时,取消订阅会更困难,从而更难跟踪错误的来源。你所说的unity不取消订阅委托事件是什么意思?你需要手动取消订阅,但你可以取消订阅。你只是问“我如何做UnityEvent”?是的,我可以手动取消订阅,但当错误增加时,它会变得更复杂,当我错过某个事件时,我会花更多时间查看代码。我想UnityEvent可以。你会犯什么样的错误?关于您当前的代码,您应该为来自未订阅事件的两个不同事件错误创建两个不同的委托(“m_animator已销毁,但您正在尝试访问…”)。简单地取消订阅就可以了。当订阅变得更复杂时,取消订阅会更困难,从而更难追踪错误的来源。