在Unity中保持分数并传递到下一个场景

在阅读并尝试了许多不同的例子后,我仍然坚持在Unity中从一个级别到下一个级别获得分数这个相当简单的问题。

我有一个C#脚本来处理我的游戏逻辑:

首先,我设置我的级别变量:

public class GameLogic : MonoBehaviour { public GUIText countText; public GUIText targetCity; public GUIText gameOverText; public GUIText endScoreText; public GUIText timerText; public Texture2D bgImage; private int count; public GameObject cityPrefab; List mycities; public float finalScore; // I Want this value to be available when my next scene loads private float startTime; 

在此之后,我的关卡代码执行正常,直到满足GameOver条件(时间到了)。 然后,此代码执行:

  public void GameOver () { gameOverText.text = "time is up!"; endScoreText.text = "You have found " + count.ToString() + " cities. Good wrok!"; Destroy (GameObject.FindWithTag("EmptyCity")); Destroy (GameObject.FindWithTag("City")); Destroy (GameObject.FindWithTag("TargetCity")); finalScore = count; // SO AT THIS STAGE, MY FINAL SCORE IS SET AND READY TO BE PASSED TO THE NEXT SCENE. QUESTION IS HOW? StartCoroutine(Wait()); } IEnumerator Wait() { yield return new WaitForSeconds(7); Application.LoadLevel (3); } 

所以,我用公共浮动’finalScore’中的更新值结束我的关卡。 到现在为止还挺好。 现在我的问题开始了:级别3加载,级别2的所有游戏对象都被销毁。 在我的游戏中,3级是一个简单的Unity场景,我祝贺玩家的表现。 我想从我之前的场景(level2)访问该公共浮点数finalScore。

我知道我必须在某处使用Dontdestroyonload。 但我不知道怎么做。 我如何以及在哪里创建一个具有公共浮动’finalScore’的GameObject? 如何在我的新关卡中调用GameObject,以便在新的关卡中执行类似的操作:

  public GUIText ContratsOnScore; void SetContratsText() { CongratsOnScore = "Congratulations, you scored" + (finalScoreFloatValue from Previous level).ToString(); 

DontDestroyOnLoad方法可以在对象上调用,而不是在单个变量上调用。 它代表了这种价值的最佳方法,需要从实际场景中“导出”。

但是,您也可以使用PlayerPrefs 。 它们用于“更高”持久性级别的信息,例如解锁级别的标志,排名系统的最终得分或可自定义角色的属性。 这就是为什么DontDestroyOnLoad方式更适合(对于你的“临时”分数),但你也可以使用这个。 基本上,PlayerPrefs是存储在操作系统的注册表中的信息。

在退出实际场景之前,以这种方式保存分数:

 PlayerPrefs.SetInt("Player Score", finalScore); 

并且,当下一个场景开始时,通过检索该信息来初始化分数变量:

 finalScore = PlayerPrefs.GetInt("Player Score"); 

( 这里有类似的post)

有人说,我无耻地引用,在C#类中使用静态变量为你的数据,你去…

(我仍然希望将参数传递给LoadLevel本身,但这是另一个故事)