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

时间:2014-04-04 12:32:50

标签: c# unity3d

在阅读并尝试了许多不同的例子之后,我仍然坚持这个相当简单的问题,即在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<MyCity> 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(); 

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

here类似帖子)

答案 1 :(得分:0)

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

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