【发布时间】:2020-07-27 05:05:30
【问题描述】:
我知道,很多人都问过这个问题。我已经看过所有这些帖子,但没有一个解决方案能解决我的问题。我正在创建一个级别进度条,在此脚本中,我尝试更新文本(levelNumber)并在每次级别完成时向 levelNumber 添加 +1,这里我使用 playerprefs 保存 levelNumber,以便数据可以通过下一个级别(场景)。但问题是 levelNumber 甚至没有在 Text 字段中更新,根据脚本 Text_1 应该从 0 开始,Text_2 从 1 开始,当游戏开始显示我在检查器 1 和 2 中给出的值时。确认我已将检查器中的值更改为 21当游戏开始显示 21 和 30 时再次显示 30。这意味着 UI 文本未从脚本更新。
public class PrograssBar : MonoBehaviour
{
[SerializeField] private Text Text_1;
[SerializeField] private Text Text_2;
private int levelNumber = 0;
[SerializeField] Transform startTransform;
Transform finishTransform;
[SerializeField] Slider slider;
float maxDistance;
void OnEnable()
{
levelNumber = 0;
}
void Start()
{
finishTransform = GameObject.FindGameObjectWithTag("CloneGoal").GetComponent<Transform>();
maxDistance = getDistance();
levelNumber = PlayerPrefs.GetInt("LevelNumber");
}
void Update()
{
if (startTransform.position.z <= maxDistance)
{
float distance = 1 - (getDistance() / maxDistance);
setProgress(distance);
}
}
float getDistance()
{
return Vector3.Distance(startTransform.position, (finishTransform.position - new Vector3(0, 0, 22)));
}
void setProgress(float p)
{
slider.value = p;
}
private void LevelUp()
{
UpdateLevel(levelNumber + 1);
PlayerPrefs.SetInt("LevelNumber", levelNumber);
}
private void UpdateLevel(int levelNumber)
{
this.levelNumber = levelNumber;
Text_1.text = " " +this.levelNumber.ToString();
Text_2.text = " " +(this.levelNumber + 1).ToString();
}
}
【问题讨论】:
标签: c# unity3d user-interface