Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何在Unity中动态记录场景之间的分数?_C#_Unity3d - Fatal编程技术网

C# 我如何在Unity中动态记录场景之间的分数?

C# 我如何在Unity中动态记录场景之间的分数?,c#,unity3d,C#,Unity3d,我有一个我无法理解的UI错误。我希望能够把我的分数带到每个场景中,同时让每个场景彼此独立。如果玩家选择在第6级开始比赛,他应该能够用一个干净的记分板开始比赛,就像在第1级开始一样。分数应继续进行unitl转移,直到球员死亡,此时分数应设置回0。为此,我预制了记分板,并使用单例模式将其放入每个场景中,以确保场景中没有重复的记分板。在尝试使用UnityEngine.UI访问文本类型的我的分数文本UI时,当加载新场景后调用该类时,我收到一个空引用错误。下面是C#类,它们定义了用于实现Unity 201

我有一个我无法理解的UI错误。我希望能够把我的分数带到每个场景中,同时让每个场景彼此独立。如果玩家选择在第6级开始比赛,他应该能够用一个干净的记分板开始比赛,就像在第1级开始一样。分数应继续进行unitl转移,直到球员死亡,此时分数应设置回0。为此,我预制了记分板,并使用单例模式将其放入每个场景中,以确保场景中没有重复的记分板。在尝试使用UnityEngine.UI访问文本类型的我的分数文本UI时,当加载新场景后调用该类时,我收到一个空引用错误。下面是C#类,它们定义了用于实现Unity 2019.4.1f1中层次结构的功能和screes片段的方法。我还附上了一段youtube视频短片,向你展示了第一个场景中的乐谱确实有效,但在之后的任何其他场景中都无效。我知道如果有多个场景,我会在每个场景开始时销毁文本UI。我不明白的是,为什么嵌套在记分板画布下的文本UI在创建的每个实例的Awake()上都找不到它的引用,为什么它被称为null。我真的很感激任何人的帮助

以下是按以下顺序排列的屏幕片段和视频:

  • bug的Youtube视频
  • 记分板画布的层次结构
  • 分数文本的层次结构
  • 记分板单件类(附加到记分板画布)/记分文本类(附加到记分文本UI)
  • 用于在CollisionHandler类中完成级别后添加分数的类的实现
  • 如果这些都没有帮助,下面是github链接以查看项目代码:


    将分数存储在调用
    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()。这不是正确的做法吗?