加载另一个场景后,UI按钮停止工作

时间:2016-08-02 17:26:36

标签: unity3d

我有UI按钮来切换声音。 OnClick事件链接到此单例GameObject。当我移动到下一个场景并回到主场景时,我发现当对象仍然存在于层次结构中时,OnClick对象会丢失!那么问题是什么?

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class SoundsManagerController : MonoBehaviour {

    static SoundsManagerController Instance = null;       



    void Awake()
    {
        // First we check if there are any other instances conflicting
        if (Instance != null )
        {
            // If that is the case, we destroy other instances
            Destroy(gameObject);
        }
        else { 
            // Here we save our singleton instance
            Instance = this;

            // Furthermore we make sure that we don't destroy between scenes (this is optional)
            DontDestroyOnLoad(gameObject);
        }
    }

    public void toggleSound(){

        Instance.GetComponent<AudioSource> ().enabled = !Instance.GetComponent< AudioSource> ().enabled;
    }

}

1 个答案:

答案 0 :(得分:0)

为按钮使用单独的画布,并将它们保留为单例对象的子画面。

如果场景中已有画布,请确保无论何时进入场景,该按钮都会设置为画布的子画面。

当这些应该解决您的问题时,您应该考虑不使用带有单例对象的按钮。在任何场景中的Start()中获取单件对象,并从已经放置的按钮访问声音切换,该按钮维护您的UI布局。

在开始时获取包含toggle方法调用函数的单例对象。

SoundManagerController soundManager;

void Start ()
{
 soundManager = GameObject.FindWithTag("audio_manager_tag").GetComponent <SoundManagerController>();
}

从切换按钮调用以下方法。

public void CallToggleMethod()
{
 soundManager.toggleSound ();
}