unity3d - 避免 Unity UI 事件回调链
问题描述
我如何在 Unity 中防止这种情况(A 应该对 C 事件做出反应,但 A 知道 B 的实例并且 B 知道 C 的实例):在下面的情况下,A 创建 B 的实例来创建 C 的实例,现在 C 是 UI带有在单击时获取事件的按钮的元素。在这种情况下,B 只需将事件“传递”给必须对事件做出反应的 A。我想尽量避免这种情况。一种解决方案可能是创建一个“eventManager”单例,将所有事件分派给已注册的对象……但我不太喜欢单例。
Class A : Monobehaviour
{
Start()
{
GameObject bGO = InstantiateGameobject();
B b = bGO.GetComponent<B>();
b.m_onButtonClicked += DoSmthinA;
}
private DoSmthinA
{
Log("A";)
}
}
Class B : Monobehaviour
{
public event System.Action m_onButtonClicked;
Start()
{
GameObject cGO = InstantiateGameobject();
C c = cGO.GetComponent<C>();
c.m_onButtonClicked += DoSmthinB;
}
private DoSmthinB
{
Log("B";)
m_onButtonClicked?.Invoke();
}
}
Class C : Monobehaviour
{
public UnityEngine.UI.Button m_button;
public event System.Action m_onButtonClicked;
Start()
{
button.onclick.addlistner(OnButtonCLicked);
}
private OnButtonCLicked
{
Log("C";)
m_onButtonClicked?.Invoke();
}
}
解决方案
推荐阅读
- excel - 反向多数据绘图
- julia - 在脚本中定义时,Julia 函数不打印输出
- asp.net-core - 如何将 Asp.net core Identity 用户连接到 IdentityServer4 用户
- python - Python 谷歌表格格式
- node.js - 如何将 hbs 车把文件链接到 ejs 文件?错误 - “无法在视图目录中查找视图“employee/addOrEdit”...”
- javascript - 防止双击带有标签的复选框
- python - Python,在其他 .py 文件/NameError 中使用函数中的全局变量
- azure - 如何在代码授权流中检查从 Azure 获得的刷新令牌?
- python - 将嵌套列表转换为多个字典
- javascript - react-native 功能组件在哪里实现初始化代码