C# 我如何在Unity中动态记录场景之间的分数?
我有一个我无法理解的UI错误。我希望能够把我的分数带到每个场景中,同时让每个场景彼此独立。如果玩家选择在第6级开始比赛,他应该能够用一个干净的记分板开始比赛,就像在第1级开始一样。分数应继续进行unitl转移,直到球员死亡,此时分数应设置回0。为此,我预制了记分板,并使用单例模式将其放入每个场景中,以确保场景中没有重复的记分板。在尝试使用UnityEngine.UI访问文本类型的我的分数文本UI时,当加载新场景后调用该类时,我收到一个空引用错误。下面是C#类,它们定义了用于实现Unity 2019.4.1f1中层次结构的功能和screes片段的方法。我还附上了一段youtube视频短片,向你展示了第一个场景中的乐谱确实有效,但在之后的任何其他场景中都无效。我知道如果有多个场景,我会在每个场景开始时销毁文本UI。我不明白的是,为什么嵌套在记分板画布下的文本UI在创建的每个实例的Awake()上都找不到它的引用,为什么它被称为null。我真的很感激任何人的帮助 以下是按以下顺序排列的屏幕片段和视频:C# 我如何在Unity中动态记录场景之间的分数?,c#,unity3d,C#,Unity3d,我有一个我无法理解的UI错误。我希望能够把我的分数带到每个场景中,同时让每个场景彼此独立。如果玩家选择在第6级开始比赛,他应该能够用一个干净的记分板开始比赛,就像在第1级开始一样。分数应继续进行unitl转移,直到球员死亡,此时分数应设置回0。为此,我预制了记分板,并使用单例模式将其放入每个场景中,以确保场景中没有重复的记分板。在尝试使用UnityEngine.UI访问文本类型的我的分数文本UI时,当加载新场景后调用该类时,我收到一个空引用错误。下面是C#类,它们定义了用于实现Unity 201
将分数存储在调用
DontDestroyOnLoad(this.gameObject)的monobehavior中代码>
这将在场景更改之间保留该对象 至于它为什么不起作用,我真的不确定。
但我可以告诉你一些解决方法:
您可以尝试在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();
在我看来,它会更干净,更容易使用。
如果您想进一步简化,还可以在update函数中更新scoreText。但由于您只在绿色区域着陆时添加点,因此您的方式也很好。
希望我能提供帮助。我将尝试实施这一点,并在明天@Weedosaurus返回结果。非常感谢你们帮助我,伙计们,我真的很感激:)。我可以在检查这些答案后发布更新!神奇的人,唯一缺少的就是引用文本。非常感谢你!它起作用了:)你介意解释一下你做了什么吗。我对静力学是新手,我不了解_实例和实例成员变量。事实上,我也不是这方面的专家。我刚才告诉过你我一直使用单例的方式:用于池、游戏管理器、广告等。基本的是创建get和notset脚本的公共静态实例。在清醒状态下,确保它是唯一的一个。很高兴我能帮上忙:D如果你还有任何疑问,或者突然出了什么问题,请评论这个帖子,我会再次检查。Ps.实例将被使用,而_实例将被内部检查。也许不是。正如我所说,我也不太确定。感谢ahahWell不太确定你在解决这个问题上做得很好,我已经研究了大约8个小时了。我只找到了“使用UserPrefs()。但我不想将数据存储到机器上,这是人们不理解的。我需要一条路绕过它,而你却把它钉在了头上。如果你不介意的话,我会研究一下为什么会这样。我将在其他地方发布一个问题,询问社区为什么它有效,看看我是否能得到深入的解释。再次感谢您,如果需要,我会在这里留言。:)焦板本身是DontDestroyOnLoad()。这不是正确的做法吗?