我有按钮预置。它是附加到OnClick的EventSystem预置和选择方法称为( doIt )。

此方法(doIt)打印消息并启用名为( Panel)的面板。
public void doIt()
{
print("Doing !!!");
helpCanvas.SetActive(true);
}EventSystem Prefab有脚本,其中有方法( doIt )和gameObject ( Button )。

面板预置是不活动的

我把这些Prefab ( Button,EventSystem和Panel )放到了一些场景(大约17个场景)中,就像这样。

的问题是:当我玩游戏时,点击按钮就不会发生任何事情。

,但在我停止游戏之后,面板就启用了。

注意:只在SystemEvent实例依赖于预制件时才会发生,但是如果我手动从场景中拖出面板

而SystemEvent实例到OnClick,这种情况没有发生

为什么会发生这种事?以及如何解决这个问题?对于所有具有相同功能的按钮,手动重新附加Button OnClick EventSystem并不适合我或任何人。或将Panel实例附加到每个EventSystem实例。
发布于 2019-01-30 05:37:38
预制组件不能引用场景中的对象。这是因为每次联合实例化预置文件时,它如何才能知道引用的对象是否仍然在那里。解决方法是在按钮预置中添加一个脚本组件,然后在预置所需操作的内部创建一个函数。您的按钮预置可以有一个引用--只对它本地的东西有(不依赖于场景,每次实例化预制件时都会在那里)。实例化对象之后,主脚本可以执行buttonInstantiatedPrefabName.GetComponent().evsys = evsys;这样,所有编辑器引用都将存储在主脚本中,主脚本将把它分配给从预制件实例化的其他gameObjects。
https://stackoverflow.com/questions/54433857
复制相似问题