Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在StateMachineBehaviour脚本中创建事件的更好方法(Unity)_C#_Unity3d_State_Behavior - Fatal编程技术网

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已销毁,但您正在尝试访问…”)。简单地取消订阅就可以了。当订阅变得更复杂时,取消订阅会更困难,从而更难追踪错误的来源。