我有 Prefab 按钮。它是OnClick附加到EventSystem Prefab上的,并选择名为(doIt)的方法。
此方法(doIt)打印消息并启用名为(Panel)的面板。
public void doIt()
{
print("Doing !!!");
helpCanvas.SetActive(true);
}
EventSystem Prefab 具有已附加方法(doIt)和gameObject(Button)的脚本
面板 Prefab 无效
我在这些场景(大约17个场景)中拖动了这些 Prefab (按钮,事件系统和面板)。
问题是: 当我玩游戏时,单击按钮没有任何反应
,但是在我停止游戏后面板才启用
注意: 仅当SystemEvent实例依赖于prefab时才会发生这种情况,但是如果我从场景中手动拖动面板 和SystemEvent实例到OnClick都没有发生
为什么会这样?以及如何解决呢? 对于具有相同功能的所有按钮,手动或重新安装Button OnClick EventSystem都不适合我或任何人。或将Panel实例附加到每个EventSystem实例。
答案 0 :(得分:1)
预制件不能引用场景中的对象。这是因为每次Unity实例化预制件时,应该如何得知所引用的对象是否仍然存在。解决方法是在按钮预制件上添加脚本组件,然后在内部执行预定功能的函数。您的按钮预制件只能仅引用其本地内容(不依赖于场景,每次实例化预制件时都存在)。实例化对象后,您的主脚本可以执行buttonInstantiatedPrefabName.GetComponent()。evsys = evsys;。这样,您所有的编辑器引用都将存储在主脚本中,该脚本会将其分配给从预制实例化的其他gameObject。