c# - Unity中脚本之间的最佳通信方式是什么
问题描述
例如,假设我有一个附加了管理器脚本的游戏对象 A,它在开始时会生成 x 数量的附加了 B 脚本的游戏对象。
当带有脚本 B 的游戏对象这么说时,带有脚本 C 的不同游戏对象应该做某事。
所以问题是,这三个人交流的最佳方式是什么?
显然,脚本 B 可以只调用脚本 C,但是我觉得这种方法缺乏结构和组织。
脚本 A 也可以引用脚本 C,脚本 B 可以告诉脚本 A 对脚本 C 执行操作。
我觉得我应该遵循某种规则,但我还没有遇到过。任何帮助深表感谢!
解决方案
显然,脚本 B 可以只调用脚本 C,但是我觉得这种方法缺乏结构和组织。
真的。这就是GameObject.SendMessage
函数的用途。不幸的是,它很慢,我不推荐它,但值得一提。
如果您有许多需要与其他对象通信的对象,请使用 和 实现事件管理event
器delegate
。这是正确的方法。你可以在这里找到完整的EventManager
实现。
有了它,您可以通过以下方式将任意数量的函数注册到事件中:
EventManager.StartListening("jump", someFunction);
从事件中取消注册任何函数:
EventManager.StopListening("jump", someFunction);
从那里,您可以在任何监听它的对象上调用该事件:
EventManager.TriggerEvent("jump");
推荐阅读
- c# - 在1gb文件c#中搜索和替换文本的有效方法
- sql - SQL Server Query - 如何逐行转置并将它们堆叠起来?
- java - var/task/org/springframework/cglib/core/NamingPolicy.class(权限被拒绝)”,“errorType”:“java.io.FileNotFoundException”
- java - 未使用 Java 代码段设置 Google Cloud 项目环境变量
- strace - strace 报告 x32 和 64 位模式
- sql - 在 SQL db 中存储扩展 ASCII 值时出现问题
- c# - 使用 c# 绕过 SSRS 的 Windows 身份验证
- java - QuickSort IndexOutOfBound 异常数组列表
- xamarin - Xamarin 表单获取网格项位置
- python - Pandas:为一列赋值,只要条件持续存在并且某个值出现在另一列中