通过C#添加事件侦听器函数,但仍然缺少它

通过C#添加事件侦听器函数,但仍然缺少它,c#,events,unity3d,C#,Events,Unity3d,我变得很奇怪,我不知道为什么?我在按钮单击事件中添加了函数addlistener,但在我重新加载场景时它仍然丢失。我有这个功能。(我已经测试过,它正确地获得了所需的按钮对象) public void SetupMenuSceneButtons() { if(GameObject.Find(“BtnStartHost”)) Log(“找到BtnStartHost”); if(GameObject.Find(“BtnJoinGame”)) Log(“找到BtnJoinGame”); GameObje

我变得很奇怪,我不知道为什么?我在按钮单击事件中添加了函数addlistener,但在我重新加载场景时它仍然丢失。我有这个功能。(我已经测试过,它正确地获得了所需的按钮对象)

public void SetupMenuSceneButtons()
{
if(GameObject.Find(“BtnStartHost”))
Log(“找到BtnStartHost”);
if(GameObject.Find(“BtnJoinGame”))
Log(“找到BtnJoinGame”);
GameObject.Find(“BtnStartHost”).GetComponent().onClick.RemoveAllListeners();
GameObject.Find(“BtnStartHost”).GetComponent().onClick.AddListener(委托{StartupHost();});
GameObject.Find(“BtnJoinGame”).GetComponent().onClick.RemoveAllListeners();
GameObject.Find(“BtnJoinGame”).GetComponent().onClick.AddListener(委托{JoinGame();});
}
我在onlevelwasload事件上调用上述函数,但其单击时的函数分配仍然丢失,并且在我重新加载场景时,我的按钮不起作用。我也尝试过在没有委托的情况下添加事件侦听器,但遇到了相同的问题

 GameObject.Find("BtnJoinGame").GetComponent<Button>().onClick.AddListener(JoinGame);
GameObject.Find(“BtnJoinGame”).GetComponent().onClick.AddListener(JoinGame);
我也尝试过这个任务,但问题仍然存在

GameObject.Find("BtnStartHost").GetComponent<Button>().onClick.RemoveAllListeners();
        GameObject.Find("BtnStartHost").GetComponent<Button>().onClick.AddListener(()=> { StartupHost(); });
        GameObject.Find("BtnJoinGame").GetComponent<Button>().onClick.RemoveAllListeners();
        GameObject.Find("BtnJoinGame").GetComponent<Button>().onClick.AddListener(() => { JoinGame(); });
GameObject.Find(“BtnStartHost”).GetComponent().onClick.RemoveAllListeners();
GameObject.Find(“BtnStartHost”).GetComponent().onClick.AddListener(()=>{StartupHost();});
GameObject.Find(“BtnJoinGame”).GetComponent().onClick.RemoveAllListeners();
GameObject.Find(“BtnJoinGame”).GetComponent().onClick.AddListener(()=>{JoinGame();});

我在v5.5上对您的代码进行了测试,只是没有调用onlevelwasload,并触发了一个被弃用的警告(有趣的是,它仍然在VS中自动完成)

以下工作正在进行中:

 void OnEnable()
 {
     SceneManager.sceneLoaded += SceneManager_sceneLoaded; ;
 }

private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1)
{
    SetupMenuSceneButtons();
}

你真的得到了指示按钮被找到的打印结果吗?您可以尝试在之后立即调用,以查看它是否注册。@Everts yes我正确获取了button对象。但是如何通过代码调用onClick呢@好的,让我检查一下并通知你you@Everts是,工作正常
 void OnEnable()
 {
     SceneManager.sceneLoaded += SceneManager_sceneLoaded; ;
 }

private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1)
{
    SetupMenuSceneButtons();
}