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
相关产品推荐
相关产品推荐

