我如何将我的球员得分保留到新的场景?

时间:2019-01-06 14:35:32

标签: c# unity3d

我有一个简单的脚本来为玩家计算一个分数,如何获取该值并将其显示在游戏中?

这是我的得分脚本:

public class scoreScript : MonoBehaviour {

 public static int scoreValue = 0;
 Text score;

 // Use this for initialization
 void Start () {
     score = GetComponent<Text>();
 }

 // Update is called once per frame
 void Update () {
     score.text = "Score:" + scoreValue;
 }

}

4 个答案:

答案 0 :(得分:1)

在退出当前场景时将其存储在PlayerPrefs中,将其保存在playerpref中,如:

PlayerPrefs.Setint(" CurrentScore",scoreValue);

然后通过以下方式在新场景中检索它:

scoreValue = PlayerPrefs.Getint(" CurrentScore");

答案 1 :(得分:0)

简单,只需在游戏场景中所需的任何脚本中调用“ scoreScript.scoreValue”即可。

答案 2 :(得分:0)

您已经完成了public static,剩下的就是在场景的文本字段脚本中编写游戏了:

gameOverText.text = "Score: " + scoreScript.scoreValue;

假设gameOverTextText

您无需创建实例来访问静态成员,则应使用类名(在您的情况下为scoreScript)来访问它们。

但是,混合存储全局得分和用于在单个类中显示它的textField并不合适,因为在向游戏中添加新功能时,所有全局变量将位于不同的类中,并且您将越来越关注同时修改您的代码。为避免这种情况,可以将静态类用作存储所有全局变量的“核心”。这将是第一次。

DontDestroyOnLoadGameObject一起使用,因此在加载新的场景时它们不会被销毁。如果您在脚本中调用它,则计分GameObject的分数将保留,文本字段也将保留,因为它是该对象的组合,并且会出现在游戏场景中,所以不要这样做。

答案 3 :(得分:-2)

加载新场景时,带有“ scoreScript”的gameObject将丢失。为了将相同的游戏对象转移到新的场景(为了避免丢失脚本所携带的信息,这是有意义的),您需要使用“ DontDestroyOnLoad”方法。 您只需在单行为的Awake方法中调用该方法,然后您的游戏对象(以及脚本中的数据)将继续新的场景加载。 以下是相关文档: https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

这是一个代码示例:

public class scoreScript : MonoBehaviour {
    public static int scoreValue = 0;
    Text score;

    void Awake(){
        DontDestroyOnLoad(this.gameObject);
    }

    void Start () {
        score = GetComponent<Text>();
    }

    void Update () {
        score.text = "Score:" + scoreValue;
    }
}