是否有一种简单的解决方案来侦听/触发不同脚本中的“事件”,而无需彼此定义这些脚本/游戏对象? (用引号引起来,因为也许我正在寻找其他名称的东西)。
例如,“ object1”具有一个脚本,该脚本具有触发事件的函数,该事件会触发其他对象中的函数(例如爆炸),但这样我就不必在其他对象中定义“ object1”,反之亦然反之亦然。
有一个简单的解决方案吗?我发现的所有内容都是针对此情况和方案的可靠解决方案,因此我无需使用事件就可以使用更少的代码来摆脱困境。
答案 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>
。
使用这样的系统,您只需在静态事件管理器引用中注册事件侦听器,然后通过向其传递事件名称来触发事件,就可以在脚本之间建立关系,而不必彼此公开它们的引用。