在阅读并尝试了许多不同的例子之后,我仍然坚持这个相当简单的问题,即在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();
答案 0 :(得分:3)
DontDestroyOnLoad方法可在对象上调用,而不是在单个变量上调用。它代表了这种价值的最佳方法,需要从实际场景中“导出”。
但是,您也可以使用PlayerPrefs。它们用于“更高”持久性级别的信息,例如解锁级别的标志,排名系统的最终分数或可自定义角色的属性。这就是为什么DontDestroyOnLoad方式更适合(对于你的“临时”分数),但你也可以使用这个。基本上,PlayerPrefs是存储在操作系统注册表中的信息。
在退出实际场景之前,以这种方式保存分数:
PlayerPrefs.SetInt("Player Score", finalScore);
并且,当下一个场景开始时,通过检索该信息来初始化分数的变量:
finalScore = PlayerPrefs.GetInt("Player Score");
(here类似帖子)
答案 1 :(得分:0)
有人说,我无耻地引用,在C#类中为你的数据使用一个静态变量,然后你去......
(我仍然希望将参数传递给LoadLevel本身,但这是另一个故事)