【发布时间】:2016-08-18 15:03:02
【问题描述】:
我已经在 Winforms 中使用 Event 一段时间了,但我对 Unity 的东西还是很陌生。我的项目只是让一些 C# 代码在 Android 上运行,因此不需要超级高效的解决方案,只需一个有效的解决方案即可。
事件处理程序声明:
public event EventHandler OnShow, OnHide, OnClose;
事件处理程序调用:
Debug.Log("OnShow");
if (OnShow != null)
{
Debug.Log("OnShow_Firing");
OnShow(this, new EventArgs());
}
else{
Debug.Log("OnShow_empty");
}
事件处理程序添加到其他脚本但相同的游戏对象中
void Awake(){
Debug.Log("Awake");
this.gameObject.GetComponent<windowScript>().OnShow += OnShowCalled;
}
private void OnShowCalled(object o,EventArgs e)
{
Debug.Log("OnShowCalled");
}
我的调试输出如下:
- “醒”
- “演出”
- “OnShowFiring”
但“OnShowCalled”从未执行,Unity 的控制台中没有异常。
我测试了 EventArgs.Empty 而不是 cmets 中提到的 new EventArgs() 对我的问题没有影响。
期待任何帮助。
【问题讨论】:
-
我的猜测是另一个对象正在触发,而不是您订阅的对象。将信息添加到有助于识别对象实例的日志中,或者只是在
Debug.Log("OnShow");上添加一个断点,然后查看它实际上是哪个对象。顺便说一句:使用EventArgs.Empty而不是new EventArgs()。 -
场景中只有一个Gameobject同时具备这两个脚本,谢谢,我试试
EventArgs.Empty -
你的
this.gameObject.getComponent<windowScript>()让我有点奇怪。您是否可能没有订阅调用OnShow()的对象? -
验证 Awake() 确实被调用了
-
只有一个游戏对象,但您正在订阅该游戏对象的脚本组件的事件。