You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何将一个UI Text的内容正确赋值给另一个UI Text控件

Unity关卡结算时间同步解决方案

错误原因

  • 原EndScreenScript中endScreenTime = TimerScript.timerText的逻辑是替换了结算界面Text控件的引用,不是把时间文本赋值给结算界面的Text控件,完全无法实现内容同步
  • Awake生命周期只会在脚本实例化时执行一次,若结算界面初始为隐藏状态,Awake早就执行完毕,等界面启用时无法获取最新的时间数据

代码修改

1. TimerScript修改

新增公开方法获取最终格式化后的时间字符串,也可按需添加停止计时的逻辑避免关卡结束后时间继续走动:

public class TimerScript : MonoBehaviour
{
    public Text timerText;
    private float startTime;
    private bool isTiming = true; // 新增计时状态标记

    void Start() 
    {
        startTime = Time.time;
    }

    public void Update()
    {
        if (!isTiming) return; // 停止计时后不再更新
        float t = Time.time - startTime;
        string minutes = ((int)t / 60).ToString();
        string seconds = (t % 60).ToString("f2");
        timerText.text = minutes + ":" + seconds; 
    }

    // 新增公开方法,返回格式化后的最终时间
    public string GetFinalTime()
    {
        float t = Time.time - startTime;
        string minutes = ((int)t / 60).ToString();
        string seconds = (t % 60).ToString("f2");
        return minutes + ":" + seconds;
    }

    // 可选:关卡结束时调用该方法停止计时
    public void StopTimer()
    {
        isTiming = false;
    }
}

2. EndScreenScript修改

将Awake逻辑替换为OnEnable生命周期,每次界面启用时主动拉取最新时间赋值给结算界面的Text控件:

public class EndScreenScript : MonoBehaviour
{
    public Text endScreenTime;
    public TimerScript timerScript;

    void OnEnable()  
    {
        // 直接把获取到的格式化时间赋值给结算界面Text的text属性
        endScreenTime.text = timerScript.GetFinalTime();
    }
}

注意事项

  • 在Inspector面板中确保EndScreenScript的timerScript字段已经正确拖入场景中挂载了TimerScript的对象
  • 关卡完成时先调用StopTimer()方法可避免结算界面显示后时间继续走动,再调用结算界面的SetActive(true)即可自动触发OnEnable逻辑刷新时间显示

内容的提问来源于stack exchange,提问作者LBbrowns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:15:00