文本变量不会在多个级别中持续存在

Text variables don't persist in multiple levels

我想多级显示球员名和球队名。我创建了一个带有调用 servidor 加载此变量的单例的游戏对象。它适用于第一层,但不适用于其他层。游戏对象仍然存在,但不保存 PlayerName 和 TeamName。我怎样才能得到它?

这是我的代码:

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;

                }

            }
        }  );
}
}

当前您正在尝试在多个场景中保留特定于场景的对象

数据类型"Text"是一个统一对象。

尝试使用 "String",在下面的示例中,您将看到 PersistentPlayerNamePersistentTeamName 将在下一个场景 PlayerNameTeamName 不会。这一直是多场景单例存在的风险。

请注意,如果 PlayerName 和 TeamName 与 GlobalControl2(您调用 DontDestroyOnLoad 的对象)在同一个游戏对象上,则不需要这样做

我并不是建议您完全按照下面输入的方式进行操作,但这应该足以让您走上正确的道路,如果不正确,请添加评论,我会进一步解释。

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;

                }

            }
        }  );
}
}