SystemEvent预制的GameObjects无法正常工作

时间:2019-01-30 05:31:19

标签: unity3d unityscript

我有 Prefab 按钮。它是OnClick附加到EventSystem Prefab上的,并选择名为(doIt)的方法。

enter image description here

此方法(doIt)打印消息并启用名为(Panel)的面板。

public void doIt()
{
    print("Doing !!!");
    helpCanvas.SetActive(true);
}

EventSystem Prefab 具有已附加方法(doIt)和gameObject(Button)的脚本

enter image description here

面板 Prefab 无效

enter image description here

我在这些场景(大约17个场景)中拖动了这些 Prefab (按钮,事件系统和面板)。

enter image description here

问题是: 当我玩游戏时,单击按钮没有任何反应

enter image description here

,但是在我停止游戏后面板才启用

enter image description here

注意: 仅当SystemEvent实例依赖于prefab时才会发生这种情况,但是如果我从场景中手动拖动面板 enter image description here 和SystemEvent实例到OnClick都没有发生 enter image description here

为什么会这样?以及如何解决呢? 对于具有相同功能的所有按钮,手动或重新安装Button OnClick EventSystem都不适合我或任何人。或将Panel实例附加到每个EventSystem实例。

1 个答案:

答案 0 :(得分:1)

预制件不能引用场景中的对象。这是因为每次Unity实例化预制件时,应该如何得知所引用的对象是否仍然存在。解决方法是在按钮预制件上添加脚本组件,然后在内部执行预定功能的函数。您的按钮预制件只能引用其本地内容(不依赖于场景,每次实例化预制件时都存在)。实例化对象后,您的主脚本可以执行buttonInstantiatedPrefabName.GetComponent()。evsys = evsys;。这样,您所有的编辑器引用都将存储在主脚本中,该脚本会将其分配给从预制实例化的其他gameObject。