Unity-全球事件(?)

时间:2018-09-17 14:23:31

标签: c# unity3d unityscript

是否有一种简单的解决方案来侦听/触发不同脚本中的“事件”,而无需彼此定义这些脚本/游戏对象? (用引号引起来,因为也许我正在寻找其他名称的东西)。

例如,“ object1”具有一个脚本,该脚本具有触发事件的函数,该事件会触发其他对象中的函数(例如爆炸),但这样我就不必在其他对象中定义“ object1”,反之亦然反之亦然。

有一个简单的解决方案吗?我发现的所有内容都是针对此情况和方案的可靠解决方案,因此我无需使用事件就可以使用更少的代码来摆脱困境。

2 个答案:

答案 0 :(得分:2)

您可以使用以下方式: https://docs.unity3d.com/ScriptReference/Component.BroadcastMessage.html

但是,我不喜欢这种方法和个性,我会在静态类(或具有单例引用)中定义一个委托,并在那里进行管理。这样,您的脚本将仅依赖于静态对象。

希望我很清楚。

答案 1 :(得分:2)

您似乎正在考虑一个邮件系统。实际上,Unity provides a straightforward tutorial on how to set one up使用UnityEvent类听起来像您所需要的。

但是您不必遵循他们的教程。您甚至可以编写自己的文件,因为系统的要旨相对简单:

  • 创建一个管理事件的类
  • 允许在类的Dictionary中注册/注销事件监听器(键是事件名称,值是监听器类)
  • 允许通过传入名称来触发事件(基本上是在Dictionary中查找并触发所有侦听器)
  • 使用单例引用使事件管理器类在其他类中可用

要允许为同一事件注册多个侦听器,请将事件字典设置为Dictionary<string, List<EventClass>>而不是Dictionary<string, EventClass>

使用这样的系统,您只需在静态事件管理器引用中注册事件侦听器,然后通过向其传递事件名称来触发事件,就可以在脚本之间建立关系,而不必彼此公开它们的引用。