不在工作的侦听器不会统一破坏加载对象

时间:2019-01-19 12:33:00

标签: c# unity3d

以前从未使用过监听器,所以我可能只是不了解其工作方式如何?但是发生了什么事,是每次加载特定场景时,我都向按钮添加了一个侦听器。

这是停止其工作的事件列表:

  1. 当我第一次运行游戏时,侦听器将按预期工作,在脚本中创建了按钮,并添加了侦听器。
  2. 我更改场景,而不是使用包含侦听器的脚本破坏对象。
  3. 当场景返回时,脚本将重新创建按钮,并将侦听器重新添加到按钮。
  4. 使用简单的日志来检查侦听器应运行的方法,该日志将不再显示。

添加了侦听器的位置:

foreach (Sprite texture in spriteImages) 
{
    //Creates a button
    GameObject button = Instantiate (shopButtonPrefab) as GameObject;

    // gets the buttons image compnent for changing
    Image buttonImage = button.GetComponent<Image> ();
    Image[] images = button.GetComponentsInChildren<Image>();

    int newIndex = spriteIndex;
    button.GetComponent<Button> ().onClick.RemoveAllListeners ();
    button.GetComponent<Button> ().onClick.AddListener (() => ChangePlayerSkin (newIndex));
    spriteIndex++;
}

应调用的方法。

private void ChangePlayerSkin(int index)
{   
    selectedSkinIndex = index;
    Debug.Log ("noo");
    if (skinPurchased [index]) 
    {
        currentSkinIndex = index;

        foreach (GameObject button in shopButtons) 
        {   
            button.transform.GetChild (2).gameObject.SetActive (false);
        }

        shopButtons [currentSkinIndex].transform.GetChild (2).gameObject.SetActive (true);      
    }
}

// Stops working after the scene is re-loaded

仅尝试显示相关代码。每次运行特定场景时,都会在OnSceneLoaded方法中创建按钮。然后添加侦听器。为什么侦听器只能在第一次加载场景时工作?并非每次都重新加载场景。 dontdestroyonload会弄乱听众吗?

由于提出了问题,我进一步查看了程序的其余部分,但找不到其他地方的错误。在文档中也找不到与此相关的任何内容吗?仍然找不到修复程序。

我现在尝试在按钮的awake方法中的单独脚本中添加侦听器。收听者仍然无法使用。

0 个答案:

没有答案