C# 如何在Unity UI中更新文本

C# 如何在Unity UI中更新文本,c#,unity3d,C#,Unity3d,我试图在Unity中显示一个文本字符串,它会更新以显示正在发生的事情的日志。现在我的代码没有任何错误,并且加载了初始消息,但是没有更新 我确实将文本链接到Unity中的脚本,所以这不是问题所在 在开始时,我声明Text UserUpdate和一个字符串作为文本的容器 public Text UserUpdate; public string userUpdate; 在start中,我给它赋值(到目前为止这是有效的) 稍后我调用函数并使用条件来更改userUpdate的值 public void

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

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

在开始时,我声明Text UserUpdate和一个字符串作为文本的容器

public Text UserUpdate;
public string userUpdate;
在start中,我给它赋值(到目前为止这是有效的)

稍后我调用函数并使用条件来更改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;
}

使用Email和PasswordAsync登录时是否没有错误?可能回调没有被调用,因此没有为userUpdate赋值

public string UserUpdateProperty
{
    get
    {
        return userUpdate;
    }
    set
    {
        userUpdate = value;
        UpdateUser.text = userUpdate;
    }
}
另外,您也可以将UserUpdate.text的值放入
SignInWithEmailAndPasswordAsync
回调中,或者在设置UserUpdate的值时,使用一个属性来设置UserUpdate.text的值,而不是始终在Update中分配UserUpdate.text的值

public string UserUpdateProperty
{
    get
    {
        return userUpdate;
    }
    set
    {
        userUpdate = value;
        UpdateUser.text = userUpdate;
    }
}
添加此方法后,将rect调整为与画布上的文本相同的设置。删除你的文本。这会奏效的

我在TMP上也很走运,去你的场景,点击add-3d-TextMeshPro,给它起个类似“texty”的名字,然后你就可以做
texty.Text=

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

UserUpdate=GetComponent()


但是,只有当文本附加到与此脚本相同的对象时,这才起作用

我认为您应该将其重构为。将
Debug.Log(UserUpdate.text)
放入
Update
功能中,然后查看控制台选项卡中是否有任何内容。顺便问一下,您是否在
LoginButtonPressed
函数中看到了
Debug.LogError
日志?这是目前为止最好的答案
void OnGUI(){

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