正确重置场景并在Unity中保持分数

时间:2017-03-20 20:49:15

标签: c# android unity3d

所以我在Unity制作一个游戏,以便学习如何编码,而且我有点再次碰壁了。游戏是躲避掉落物体游戏",我创建对象的方式如下:

public class Salt : MonoBehaviour {
    public float delay;
    public GameObject salt;

    // Use this for initialization
    void Start () {
        InvokeRepeating("Spawn", delay, delay);
    }
    // Update is called once per frame
    void Spawn () {
        Instantiate(salt, new Vector3(Random.Range(-2.5f, 2.5f), 10, 0), Quaternion.identity);
    }
}

这部分代码似乎运行正常。当盐(坠物)与玩家接触时会出现问题。游戏重置应该是这样,但屏幕上的盐已经存在,我无法弄清楚如何删除已经制作的所有克隆。基本上我无法弄清楚当玩家输掉时如何清除已经创建的对象。

碰撞后重置游戏的方式:

public class TapToStart : MonoBehaviour {

    public Text highScore;
    public Button startButton;
    public ScoreManager sMan;

    // Use this for initialization
    void Start () {
        Init();
    }

    public void Init() {
        Time.timeScale = 0;
        sMan.SetScore(0);
        highScore.text = "High Score: " + Mathf.Round(sMan.GetHighScore()).ToString();
        startButton.gameObject.SetActive(true);
    }



    public void Pressed() {
        startButton.gameObject.SetActive(false);
        Time.timeScale = 1;
    }
}

我想也许让SaltManager对象可以正常工作,然后让Instantiated salt对象成为它的子对象,这样我就可以删除SaltManager,所有的孩子也会消失,但是我可以&#39 ;弄清楚如何做到这一点,无论如何它看起来并不太有效。任何帮助将不胜感激!谢谢!布兰登

1 个答案:

答案 0 :(得分:2)

我建议您通过重新加载场景来重置游戏,这样就可以确切地了解它在开始时的情况。您可以像这样加载场景:

SceneManager.LoadScene("SceneName");

或使用场景索引:

SceneManager.LoadScene(sceneIndex); 

我可以看到你保持高分,这可能就是你没有这样做的原因。你应该像PlayerPrefs一样保存你的高分:

PlayerPrefs.SetInt("High Score", 10);

然后您可以轻松地将其取回:

PlayerPrefs.GetInt("High Score");

这实际上可以节省您的分数,这样即使他们退出游戏并返回,您仍然可以检索它。 More info on PlayerPrefs