【问题标题】:How to update text in Unity UI如何在 Unity UI 中更新文本
【发布时间】:2018-10-11 09:19:19
【问题描述】:

我正在尝试在 Unity 中显示一串文本,该文本会更新以显示正在发生的事情的日志。现在我的代码没有任何错误并加载初始消息,但没有更新。

我确实将文本链接到 Unity 中的脚本,所以这不是问题。

一开始我声明了 Text UserUpdate 和一个用作文本容器的字符串。

public Text UserUpdate;
public string userUpdate;

一开始我给它赋值(到目前为止有效)。

public void Start()
{
    userUpdate = "Create an account or login";
}

后面我调用函数和使用条件来改变userUpdate的值

public void LoginButtonPressed()
{
    FirebaseAuth.DefaultInstance.SignInWithEmailAndPasswordAsync(EmailAddress.text, Password.text).
        ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("Login was cancelled");
                userUpdate = "Login was cancelled";
                return;
            }

            if(task.IsFaulted)
            {
                Debug.LogError("Error logging in");
                userUpdate = "Error logging in";
                return;
            }

            if(task.IsCompleted)
            {
                Debug.LogFormat("Usermanager: User signed in successfully: {0}", EmailAddress.text);
                userUpdate = "Sign in successful";
                isLoadMainScene = true;
            }


        });

}

然后在 void Update() 下我分配 UserUpdate.text 的值

void Update()
{
    UserUpdate.text = userUpdate;
}

【问题讨论】:

  • 我认为您应该将其重构为 use a CoroutineHere is an example updating the UI.
  • Debug.Log(UserUpdate.text) 放入Update 函数中,看看您是否在“控制台”选项卡中得到任何信息。顺便问一下,您在LoginButtonPressed 函数中看到Debug.LogError 日志了吗?

标签: c# unity3d


【解决方案1】:

SignInWithEmailAndPasswordAsync 没有错误吗?可能回调没有被调用,所以没有将值分配给 userUpdate。

除了总是在 Update 中分配 UserUpdate.text 的值,您还可以将其放在 SignInWithEmailAndPasswordAsync 回调中,或者在设置 userUpdate 的值时设置一个属性来设置 UserUpdate.text 的值。

public string UserUpdateProperty
{
    get
    {
        return userUpdate;
    }
    set
    {
        userUpdate = value;
        UpdateUser.text = userUpdate;
    }
}

【讨论】:

  • 这是迄今为止最好的答案
【解决方案2】:
void OnGUI(){

GUI.Label(new Rect(0,0,0,0),userUpdate);
}

添加此方法,将矩形调整为与画布上的文本相同的设置。删除你的文字。这会起作用。

我对 TMP 也有好运,转到您的场景并单击 add-3d-TextMeshPro,并将其命名为“texty”之类的名称,然后您就可以使用 texty.Text=

如果您希望它按原样工作,请将其放入您的 Awake()

UserUpdate = GetComponent<Text>();

但这仅在文本附加到与此脚本相同的对象时才有效

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多