wei*_*_yu 2 c# unity-game-engine
例如,DelegateHandler是我发送事件的地方
public class DelegateHandler : MonoBehaviour
{
public delegate void OnButtonClickDelegate ();
public static OnButtonClickDelegate buttonClickDelegate;
public void OnButtonClick()
{
if(buttonClickDelegate!=null)
buttonClickDelegate ();
}
}
Run Code Online (Sandbox Code Playgroud)
一些线程提到我需要在检查它是否为null之前为事件分配一个变量,如:
OnButtonClickDelegate tempEvent = buttonClickDelegate;
if(tempEvent!=null)
tempEvent();
Run Code Online (Sandbox Code Playgroud)
这是因为,在多线程程序中,我们需要在检查它是否为null和调用事件之间检查某些是否从事件中取消订阅.但Unity3D是单线程的,我们还需要这样做吗?我可以写作
if(buttonClickDelegate!=null)
buttonClickDelegate ();
Run Code Online (Sandbox Code Playgroud)
一些线程提到我需要在检查它是否为null之前为事件分配一个变量......但是Unity3D是单线程的,我们还需要这样做吗?
没有.
您不需要在普通的Unity应用程序中执行此操作.
现在,如果您启动另一个Thread并且您想要从那个调用该事件,Thread那么您必须这样做.如果您没有创建另一个Thread,则不需要这样做.
注意Unity的回调函数,比如OnAudioFilterRead在另一个Thread中调用.如果您正在使用此功能并且想要从那里调用事件,则必须在检查事件之前为事件分配变量null.
但是我仍然需要检查null,对吗?
是的,null在调用活动之前,您应该始终检查.
在新的C#6中你可以做到这一点
buttonClickDelegate?.Invoke();
Run Code Online (Sandbox Code Playgroud)
这消除了null检查,但你不能这样做,但在团结,因为团结不支持C#6.
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |