2016-09-21 4 views
0

Ich möchte den Spielernamen und den Teamnamen in mehreren Ebenen anzeigen. Ich habe ein Spielobjekt mit einem Singleton erstellt, das den Servidor aufruft, um diese Variablen zu laden. Es funktioniert in der ersten Ebene, aber nicht in den anderen. Das Spielobjekt bleibt bestehen, speichert jedoch nicht den Spielernamen und TeamName. Wie kann ich es bekommen?Textvariablen bestehen nicht in mehreren Ebenen

Dies ist mein Code:

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


public class GlobalControl2 : MonoBehaviour 
{ 
private static GlobalControl2 instance = null; 

private Text PlayerName; 
private Text TeamName; 

void Awake() 
{ 
    if (instance == null) 
    { 
     instance = this; 
     DontDestroyOnLoad(this.gameObject); 
    } 
    else 
    { 
     Destroy(this.gameObject); 
    } 
} 

public void Start() 
{ 

    PlayerName = GameObject.Find ("PlayerName").GetComponent<Text>(); 
    TeamName = GameObject.Find ("TeamName").GetComponent<Text>(); 

    new GameSparks.Api.Requests.AccountDetailsRequest() 
     .SetDurable(true) 
     .Send ((response) => { 
      PlayerName.text = response.DisplayName; 
     } ); 

    new GameSparks.Api.Requests.GetMyTeamsRequest() 
     .SetDurable(true) 
     .Send(teamResp => { 
      if(!teamResp.HasErrors) 
      { 
       foreach(var teams in teamResp.Teams) 
       { 
        Debug.Log("Equipo: " + teams.TeamId); 
        TeamName.text = teams.TeamId; 

       } 

      } 
     } ); 
} 
} 

Antwort

0

Aktuell Sie Szene bestimmte Objekte über mehrere Szenen

Der Datentyp „Text“ ist eine Einheit Objekt zu bestehen versuchen.

Try „String“ statt, im Beispiel unten verwenden, werden Sie sehen, dass PersistentPlayerName und PersistentTeamName wird in der nächsten Szene und Player und Teamname wird nicht verfügbar sein. Dies ist immer das Risiko, dass Multi-Szenen-Singletons haben.

Bitte nehmen Sie zur Kenntnis, dass dies nicht erforderlich ist, sollte, wenn Spielername und Teamnamen auf demselben Gameobject wie GlobalControl2 ist (die, die Sie DontDestroyOnLoad rufen)

Ich behaupte nicht, dass Sie es genau tun, wie es geschrieben wird unten, aber das sollte genug sein, um dich auf den richtigen Weg zu setzen, wenn nicht, füge einen Kommentar hinzu und ich werde weiter erklären.

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


public class GlobalControl2 : MonoBehaviour 
{ 
private static GlobalControl2 instance = null; 

private string PersistentPlayerName; 
private string PersistentTeamName; 

private Text PlayerName; 
private Text TeamName; 

void Awake() 
{ 
    if (instance == null) 
    { 
     instance = this; 
     DontDestroyOnLoad(this.gameObject); 
    } 
    else 
    { 
     Destroy(this.gameObject); 
    } 
} 

public void Start() 
{ 

    PlayerName = GameObject.Find ("PlayerName").GetComponent<Text>(); 
    TeamName = GameObject.Find ("TeamName").GetComponent<Text>(); 

    new GameSparks.Api.Requests.AccountDetailsRequest() 
     .SetDurable(true) 
     .Send ((response) => { 
      PlayerName.text = PersistentPlayerName = response.DisplayName; 
     } ); 

    new GameSparks.Api.Requests.GetMyTeamsRequest() 
     .SetDurable(true) 
     .Send(teamResp => { 
      if(!teamResp.HasErrors) 
      { 
       foreach(var teams in teamResp.Teams) 
       { 
        Debug.Log("Equipo: " + teams.TeamId); 
        TeamName.text = PersistentTeamName = teams.TeamId; 

       } 

      } 
     } ); 
} 
} 
+0

Yeeeees !! Es klappt!! Ich danke dir sehr. Und wie kann ich es machen, wenn ich es nicht auf allen Bildschirmen zeigen möchte? Wie kann ich mehrere Szenen ausschließen? – Angelsm

+0

Leider funktioniert Statik nicht, eine statische Klasse wird immer vorhanden sein, sobald sie initialisiert wurde, es sei denn, du setzt sie selbst auf null, so funktioniert C# und hat nichts mit Unity perse zu tun. (Wenn die obige Antwort Ihnen geholfen hat, markieren Sie sie bitte als Antwort) –

+0

Nochmals vielen Dank! – Angelsm

Verwandte Themen