我有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;
}
}
答案 0 :(得分:0)
为按钮使用单独的画布,并将它们保留为单例对象的子画面。
如果场景中已有画布,请确保无论何时进入场景,该按钮都会设置为画布的子画面。
当这些应该解决您的问题时,您应该考虑不使用带有单例对象的按钮。在任何场景中的Start()
中获取单件对象,并从已经放置的按钮访问声音切换,该按钮维护您的UI布局。
在开始时获取包含toggle方法调用函数的单例对象。
SoundManagerController soundManager;
void Start ()
{
soundManager = GameObject.FindWithTag("audio_manager_tag").GetComponent <SoundManagerController>();
}
从切换按钮调用以下方法。
public void CallToggleMethod()
{
soundManager.toggleSound ();
}