使用PlayerPrefs保存心脏

时间:2016-09-03 16:26:21

标签: c# unity3d game-engine

我正在以团结c#建造一个二维小行星射击游戏。我需要的是将玩家的心脏保存到下一个级别。所以我只是将得分保存在我现在需要的是心脏节省。分数保存为下一级别,所以它的工作方式如下,在第一级你有例如在3000点,你进入nesxt级别,然后它将从3000开始,但如果你点击重启或如果oyu退出你从0和从第一级开始。这就是得分与心灵一样的需要。所以如果你用1颗心完成第一级,那么你需要用1颗心去2分。如果你用3颗心完成2个tn 3将启动3颗心,如果你点击重启或者你退出那么它将从默认状态开始。心灵是图像用户界面,我想像玩家首选的scor一样,但我不确定如何。

if (col.gameObject.tag == "AsteroidBig") {
            if (heart.enabled == true && heart1.enabled == true && heart2.enabled == true) {
                heart.enabled = false;
                Instantiate (explosion, col.transform.position, col.transform.rotation);
                Vector3 pos = new Vector3 (0f, 0f, 0f);
                Instantiate (player, pos, Quaternion.identity);
                Destroy (col.gameObject);
                Destroy (this.gameObject);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
            } else if (heart1.enabled == true && heart2.enabled == true) {
                heart1.enabled = false;
                Instantiate (explosion, col.transform.position, col.transform.rotation);
                Vector3 pos = new Vector3 (0f, 0f, 0f);
                Instantiate (player, pos, Quaternion.identity);
                Destroy (col.gameObject);
                Destroy (this.gameObject);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
            } else if (heart2.enabled == true) {
                heart2.enabled = false;
                Instantiate (explosion, col.transform.position, col.transform.rotation);
                Vector3 pos = new Vector3 (0f, 0f, 0f);
                Instantiate (player, pos, Quaternion.identity);
                Destroy (col.gameObject);
                Destroy (this.gameObject);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
            } else if (heart.enabled == false && heart1.enabled == false && heart2.enabled == false) {
                Instantiate (explosion, col.transform.position, col.transform.rotation);
                Destroy (col.gameObject);
                Destroy (this.gameObject);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
                Instantiate (medast[Random.Range(0,medast.Length)],col.transform.position,col.transform.rotation);
                GameOverPanel.SetActive (true);
            }
        }

一个带有心的if语句看起来像是有点乱,但它就像这样。如果你触摸小行星,它会检查3颗心是否开启,其中一颗是假装,然后如果你有2颗心,那么另外一颗是假的,依此类推,直到你没有心而你松了。这是碰撞的逻辑。请帮助保存这个心,问任何问题,因为我知道它搞砸了。

1 个答案:

答案 0 :(得分:1)

这里有两个选项,具体取决于您的选择

1)创建一个静态类 加载新级别时不会重置静态类,因此您可以存储有关播放器的任何信息

public class GameData
{
    public static int NumberOfHearts = 3;
}

在您的代码中,您将更新NumberOfHearts以反映当您被小行星触及时有多少颗心。例如,

GameData.NumberOfHearts--; //We just got touched by an asteroid

2)场景管理器(如果您正在使用Application.LoadLevel(),则不适用)

您可以在场景的根部为玩家创建一个GameObject 然后,当你加载你的关卡时,你会打电话 SceneManager.MoveGameObjectToScene(playerObject, "sceneName")

有关MoveGameObjectToScene的详细信息,请参阅here

在这种情况下,对象将被任何脚本和子对象继承,因此您已经拥有了下一级别的所有心脏。