我有一个简单的脚本来为玩家计算一个分数,如何获取该值并将其显示在游戏中?
这是我的得分脚本:
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;
}
}
答案 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;
假设gameOverText
是Text
。
您无需创建实例来访问静态成员,则应使用类名(在您的情况下为scoreScript
)来访问它们。
但是,混合存储全局得分和用于在单个类中显示它的textField并不合适,因为在向游戏中添加新功能时,所有全局变量将位于不同的类中,并且您将越来越关注同时修改您的代码。为避免这种情况,可以将静态类用作存储所有全局变量的“核心”。这将是第一次。
DontDestroyOnLoad
与GameObject
一起使用,因此在加载新的场景时它们不会被销毁。如果您在脚本中调用它,则计分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;
}
}