c# - 启用不同对象时是否可以运行 OnEnable() ?
问题描述
我想知道如果启用子对象而不是包含脚本的对象,是否可以使 onEnable() 函数工作。在这种情况下,我在父对象中创建了一个带有主脚本的菜单,以及一些用于检测与主对象交互的子对象上的 onEnable() 的脚本,所以我想通过仅使用脚本来简化在父对象中。这是一个选项还是我必须坚持为此使用多个脚本?
这将是辅助脚本之一 (MenuOpenUpdate)。在两个空隙中改变其值的布尔值将与主脚本交互。
void Start(){
public static bool MenuOpenUpdater;
}
private void OnDisable()
{
MenuOpenUpdater = false;
}
private void OnEnable()
{
MenuOpenUpdater = true;
}
这将是主脚本 (GameMenu),我希望拥有 onEnable() 和 onDisable() 但它与包含辅助脚本的对象一起执行,所以我只能使用这个。
void Start(){
private bool MenuOpen;
}
void Update()
{
MenuOpen = MenuOpenUpdate.MenuOpenUpdater;
}
}
如您所见,辅助脚本会根据它是活动的还是禁用的来更改布尔值,然后将该值发送到主脚本。我期望的结果是通过检测何时从父对象脚本启用或禁用子对象,从而在单个脚本上实现这一点。
我不知道这是否可行,只是让它变得更简单,如果做不到,我可以坚持为此使用多个脚本,任何帮助将不胜感激。
解决方案
如果您只想查询对象是否处于活动状态,则可以使用ActiveInHierarchy属性并在主脚本中检查它。
您可以创建一个可以添加到所有子元素的自定义组件。这将包括您的内部脚本和您需要的任何自定义行为,但您可以将其命名为 ObjectEnabler 或其他任何名称,并将其附加到您的所有元素。然后在您的主脚本中,您可以引用引用对象的变量。
一种事件驱动的方法是修改内部脚本以具有您可以订阅的事件:
内部对象:
public EventHandler event ObjectEnabled;
void OnEnabled()
{
ObjectEnabled?.Invoke(this, new EventArgs());
}
以及订阅它的外部:
InnerObjectReference.ObjectEnabled += InnerObjectEnabledHandler;
public void InnerObjectEnabledHandler(object sender, EventArgs e) {
...
}
推荐阅读
- mysql - 我可以在没有联合子句的情况下重写此查询吗
- ios - 对成员 'from(jsonArray:)' 的模糊引用
- arrays - 修改多个嵌套对象/数组中的键
- amazon-web-services - Redshift - 在 where 子句中从 csv 传递值
- rest - SSMS 和 sp_OAMethod:是否存在大于 VARCHAR(8000) 的数据类型?
- c# - 通过 nunit3-console.exe 运行时获取要在 [SetUpFixture] 中执行的测试
- typescript - 从同一个文件中导出类和命名空间
- javascript - Ajax 功能在某些移动浏览器上不显示 xml 数据
- ruby-on-rails - Ruby on Rails - 多态关联 + 联合表 + 引用同一模型两次?
- java - 使用 spring 通知所有已完成的计划