Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d SystemEvent预制的游戏对象不工作_Unity3d - Fatal编程技术网

Unity3d SystemEvent预制的游戏对象不工作

Unity3d SystemEvent预制的游戏对象不工作,unity3d,Unity3d,我有按钮预制件。它是连接到EventSystem预置的OnClick,并选择名为doIt的方法 此方法不打印消息并启用名为panel的面板 public void doIt() { print("Doing !!!"); helpCanvas.SetActive(true); } EventSystem预置有一个脚本,该脚本已经附加了方法doIt和gameObject按钮 面板预制件处于非活动状态 我在一些场景中拖动了这些预制按钮、事件系统和面板,大约有17个这样的场景 问题

我有按钮预制件。它是连接到EventSystem预置的OnClick,并选择名为doIt的方法

此方法不打印消息并启用名为panel的面板

public void doIt()
{
    print("Doing !!!");
    helpCanvas.SetActive(true);
}
EventSystem预置有一个脚本,该脚本已经附加了方法doIt和gameObject按钮

面板预制件处于非活动状态

我在一些场景中拖动了这些预制按钮、事件系统和面板,大约有17个这样的场景

问题是: 当我玩游戏时,当我点击按钮时,什么也没有发生

,但面板在我停止游戏后立即启用

注: 只有当SystemEvent实例依赖于预置时才会发生这种情况,但如果我从场景中手动拖动面板,则会发生这种情况 而OnClick的SystemEvent实例没有发生这种情况

为什么会这样?如何解决这个问题?
对于所有具有相同功能的按钮,在单击EventSystem时手动重新连接按钮并不适合我或任何人。或将面板实例附加到每个EventSystem实例。

预设不能引用场景中的对象。这是因为每次Unity实例化预置时,它都应该如何知道引用的对象是否仍然存在。解决方法是在按钮预置上添加一个脚本组件,然后在其中创建一个函数来执行所需的操作。您的按钮预制只能引用它本地的东西,而不依赖于场景,每次实例化预制时都会出现。实例化对象后,主脚本可以执行ButtonInstantiatedPrefactName.GetComponent.evsys=evsys;这样,所有编辑器引用都将存储在主脚本中,主脚本将把它分配给从预置中实例化的其他游戏对象

很好,现在我在开始时定义了面板:void start{GameObject Panel=GameObject.FindGameObjectWithTagPanel;Panel.SetActivefalse;}void doIt{printTest:Panel.SetActivetrue;}但是按钮仍然无法读取。您应该测试是否正确找到了面板。另外,不要使用GameObject.FindGameObjectWithTag,而是将引用存储在主脚本中,并将它们分配给实例化的对象。是否使用代码将引用存储在主脚本中?还是拖放?如果你的意思是使用代码,你能解释一下如何捕捉预制引用吗?