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

Unity中C#脚本变量更新后无法正常显示分数的问题

问题分析与解决方案

嘿,我来帮你搞定这个分数不更新的问题!

问题根源

你在Points脚本里的score变量只在脚本初始化时赋值了一次ExampleClass.playerScore,之后就算playerScore累加增长,score也不会自动同步更新——因为它只是个普通的整数变量,不是动态关联的引用。所以界面上显示的始终是初始的0值,哪怕控制台里playerScore已经正确涨上去了。

修复方案

有两种简单的解决办法,你可以选一种适合你的:

方案一:直接在OnGUI里引用静态变量

不需要单独的score变量,每次绘制UI的时候直接取ExampleClass.playerScore的最新值:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Points : MonoBehaviour {
    void OnGUI() {
        GUIStyle style = new GUIStyle(GUI.skin.button);
        style.fontSize = 24;
        // 直接引用静态变量,每次都会获取最新值
        GUI.Label(new Rect(1, 1, 150, 30), ExampleClass.playerScore.ToString() + " points", style);
    }
}

方案二:用动态属性同步分数

如果你还是想保留score变量,可以用属性来动态获取最新值,确保每次调用都拿到最新的playerScore:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Points : MonoBehaviour {
    // 用属性动态获取最新的playerScore
    private int score {
        get { return ExampleClass.playerScore; }
    }

    void OnGUI() {
        GUIStyle style = new GUIStyle(GUI.skin.button);
        style.fontSize = 24;
        GUI.Label(new Rect(1, 1, 150, 30), score.ToString() + " points", style);
    }
}

额外小建议

另外,OnGUI是Unity的旧UI系统了,如果你用的是新版本Unity,推荐改用UGUI(Canvas+Text组件)来做分数显示,会更灵活易用!比如你可以给Text组件挂个脚本,每次分数变化时直接更新Text的text属性,比OnGUI的方式更高效也更易维护。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:19