我有一个无法弄清楚的 UI 错误。我希望能够将我的乐谱带到每个场景中,同时让每个场景彼此独立。如果玩家选择在第 6 级开始游戏,他应该能够使用干净的记分牌来进行,与从第 1 级开始相同。 分数应该继续转移直到玩家死亡,此时分数应该被退回到 0。为此,我预制了我的记分牌,并使用单例模式将其放入每个场景中,以确保场景中没有重复的记分牌。在尝试使用 UnityEngine.UI 访问我的 Text 类型的分数文本 UI 时,我在加载新场景后调用该类时收到空引用错误。以下是定义用于在 Unity 2019.4.1f1 中实现我的层次结构的功能和碎片片段的方法的 C# 类。我还附上了一个简短的 YouTube 视频,向您展示该乐谱在第一个场景中确实有效,但在之后的任何其他场景中都不起作用。我知道如果有多个场景,我会在每个场景开始时破坏文本 UI。我不明白的是为什么嵌套在记分板画布下的文本 UI 没有在 Awake() 上找到它对创建的每个实例的引用以及为什么它被称为 null。我真的很感谢任何人的帮助!如果有多个,则在每个场景开始时销毁文本 UI。我不明白的是为什么嵌套在记分板画布下的文本 UI 没有在 Awake() 上找到它对创建的每个实例的引用以及为什么它被称为 null。我真的很感谢任何人的帮助!如果有多个,则在每个场景开始时销毁文本 UI。我不明白的是为什么嵌套在记分板画布下的文本 UI 没有在 Awake() 上找到它对创建的每个实例的引用以及为什么它被称为 null。我真的很感谢任何人的帮助!
以下是按此顺序的屏幕片段和视频:
如果这些没有帮助,这里是 github 链接以查看项目代码:
至于为什么它不起作用,我不太确定。但是我可以告诉您一些解决方法:您可以尝试在 ScoreText 的脚本中创建 ScoreText 的公共静态实例。
public static ScoreText _instance;
public static ScoreText instance { get { return _instance; } }
private int score;
private Text scoreText;
private void Awake()
{
if (_instance != null && _instance != this)
{
Destroy(this.gameObject);
}
else
{
_instance = this;
}
}
void Start()
{
score = 0;
scoreText.text = score.ToString();
}
并通过以下方式访问其功能:
ScoreText.instance.AddToScore();
在我看来,它会更干净,更容易使用。如果您想进一步简化,您也可以在更新函数中更新 scoreText。但是由于您只在降落在这些绿色区域时添加积分,因此您的方式也很好。希望我能帮上忙。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句