Unity3d SystemEvent预制的游戏对象不工作
我有按钮预制件。它是连接到EventSystem预置的OnClick,并选择名为doIt的方法 此方法不打印消息并启用名为panel的面板Unity3d SystemEvent预制的游戏对象不工作,unity3d,Unity3d,我有按钮预制件。它是连接到EventSystem预置的OnClick,并选择名为doIt的方法 此方法不打印消息并启用名为panel的面板 public void doIt() { print("Doing !!!"); helpCanvas.SetActive(true); } EventSystem预置有一个脚本,该脚本已经附加了方法doIt和gameObject按钮 面板预制件处于非活动状态 我在一些场景中拖动了这些预制按钮、事件系统和面板,大约有17个这样的场景 问题
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,而是将引用存储在主脚本中,并将它们分配给实例化的对象。是否使用代码将引用存储在主脚本中?还是拖放?如果你的意思是使用代码,你能解释一下如何捕捉预制引用吗?