【发布时间】:2017-10-25 15:46:58
【问题描述】:
我注意到当目标被停用时GameObject.BroadcastMessage 不起作用。如何调整它以使其在这种情况下工作。
显然,这个EventOnMonoCallback.cs 脚本附加到TOOTHPANEL,它会在OnEnable() 上触发,但_Food 游戏对象本身是不活动的。
似乎,BroadcastMessage 不适用于已停用的孩子?
由于某种原因,在其他脚本将 TOOTHPANEL 游戏对象设置为 true 之前,TOOTHPANEL 无法处于活动状态。
EventOnMonoCallback.cs
public class EventOnMonoCallback : MonoBehaviour
{
public enum MonoCallbackType
{
Awake,
Start,
Update,
OnEnable,
OnDisable,
OnDestroy
}
public MonoCallbackType Type;
public UnityEvent Do;
void Awake()
{
if (Type == MonoCallbackType.Awake)
{
Do.Invoke();
}
}
void Start()
{
if (Type == MonoCallbackType.Start)
{
Do.Invoke();
}
}
void Update()
{
if (Type == MonoCallbackType.Update)
{
Do.Invoke();
}
}
void OnEnable()
{
if (Type == MonoCallbackType.OnEnable)
{
Do.Invoke();
}
}
void OnDisable()
{
if (Type == MonoCallbackType.OnDisable)
{
Do.Invoke();
}
}
void OnDestroy()
{
if (Type == MonoCallbackType.OnDestroy)
{
Do.Invoke();
}
}
}
【问题讨论】:
-
看起来您正在使用某种框架,但如果您不告诉我们它是什么,我们将无法帮助您。无论哪种方式,这都不是 Unity 问题,而是关于该框架的问题
-
@Mars 这是一个 Unity 问题,已明确标记为。
-
这是两个问题——第一个是询问如何绕过广播消息不适用于不活跃的孩子,第二个问题是 OP 在帖子的第一行回答...
-
但是谷歌搜索后,我找不到任何对 EventOnMonoCallback 的引用,所以我想这是一个自定义脚本......在这种情况下,第一个问题的答案会改变
-
不管他是否有控制权,也没有提到组织核心,所以假设这里没有使用。
GameObject.BroadcastMessage用于在编译时调用对象中的函数而不提供函数名。您的解决方案要求在编译期间绑定该函数。GameObject.BroadcastMessage只需要将函数名称作为字符串传递,我认为这就是 op 正在寻找的,但在禁用对象时也可以工作。