我刚开始使用 Unity,当我看到事件系统存在并且我可以创建自定义事件时感到非常兴奋。我需要的事件是“IInventoryMessage::NewItemInInventory”,因此我继续为此创建了接口(interface),并将其设置在我的库存中。
然后是触发事件的时候了,文档让我有点震惊。
ExecuteEvents.Execute<IInventoryMessage>(target, null, (x,y)=>x.NewItemInInventory());
我的困惑是它似乎在传递 target
.
我希望 Unity 会跟踪所有具有消息接口(interface)的组件,并在执行时调用它。但是看来我必须自己传入GameObject。
我是否应该保留我想要接收消息的所有游戏对象的列表,并循环遍历它们以将它们传递到 Execute
中? ?如果我已经在遍历我知道需要调用的对象,那为什么此时还需要 EventSystem?
最佳答案
我仅在我的自定义输入系统中使用 ExecuteEvents
,在该系统中,目标始终是已知的并且是最新的(根据指针光线转换)。每当我想在发生某事时发送消息或触发操作时,我都会使用标准 C# 事件,正如 BugFinder 所说。
https://stackoverflow.com/questions/54999697/
相关文章:
php - 如何使用 php 代码在 WHM/Cpanel 中以编程方式创建数据库?
ionic-framework - Ionic3 - 电子邮件编辑器 - 对象(...)不是函数
javascript - 使用 css 或 html5 的置换贴图
javascript - Discord.js 机器人,临时静音命令不会静音
android - 在自定义 Camera2 API 上显示矩形边界框(覆盖),以便仅捕获框内的图像
javascript - 使 postcss 与 material ui 的 jss 一起工作
c# - .NET Core 2 中的 Startup.cs 中的 "IConfiguration
c++ - Cmake 仅包含 header 目标来自仅 header 目标