2016-08-02 9 views
0

Ich habe UI-Tasten, um den Ton umzuschalten. OnClick-Ereignis ist mit diesem Singleton-GameObject verknüpft. Wenn ich zur nächsten Szene gehe und zur Hauptszene zurückkehre, finde ich, dass das OnClick-Objekt fehlt, solange das Objekt noch in der Hierarchie ist! also, was ist das Problem ?UI-Tasten funktionieren nicht mehr, nachdem ich eine andere Szene geladen habe

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; 
    } 

} 

Antwort

0

eine separate Leinwand für die Schaltfläche und bewahren Sie sie als Kind des Singleton-Objekt.

Wenn Sie bereits eine Leinwand in der Szene haben, stellen Sie sicher, dass die Schaltfläche als untergeordnetes Element der Leinwand festgelegt ist, wenn Sie zu einer Szene gehen.

Wenn diese Ihr Problem beheben sollten, sollten Sie keine Schaltfläche mit dem Singleton-Objekt verwenden. Rufen Sie das Singleton-Objekt in Start() in einer beliebigen Szene auf und greifen Sie auf die Schaltfläche Ton von der bereits platzierten Schaltfläche zu, die Ihr UI-Layout beibehält.

Ruft das Singleton-Objekt beim Start ab, das die Aufruffunktion der Umschaltmethode enthält.

SoundManagerController soundManager; 

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

Rufen Sie die folgende Methode von Umschalttaste.

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

Dank für Ihre Hilfe .. aber können Sie einen Link oder ein Beispiel für eine besseren Ansatz bieten, weil ich für Makel mehr Leinwände und machen sie Kind von Singleton-Objekt – dotfreelancer

+0

Wo ist die UI-Taste platziert nicht mögen zu müssen? –

+0

unter der Leinwand – dotfreelancer