【问题标题】:Correctly reset Scene and keep score in Unity正确重置场景并在 Unity 中保持分数
【发布时间】:2017-03-21 16:03:26
【问题描述】:

所以我在 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 对象会起作用,然后让实例化的 salt 对象成为它的子对象就可以了,这样我就可以删除 SaltManager 之后所有的子对象也会消失,但是我不能弄清楚如何做到这一点,无论如何它似乎不太有效。任何帮助将不胜感激!谢谢! -布兰登

【问题讨论】:

  • 如何重置游戏?
  • 刚刚将编辑添加到帖子中!
  • 为什么不通过重新加载场景来重置游戏,这样您将拥有与开始时完全相同的场景。除非它不是你真正的选择。
  • 我试过了,但是当我尝试这种方式时,HighScore 重置为 0。有没有办法制作 HighScore 商店?
  • 当然把你的高分保存在PlayerPrefs.SetInt("High Score", 10); 然后你可以很容易地用PlayerPrefs.GetInt("High Score") 找回它,这样即使他们关闭你的游戏并回来他们仍然会有同样的高分。跨度>

标签: c# android unity3d


【解决方案1】:

我建议您通过重新加载场景来重置游戏,这样您就可以完全了解它最初的样子。你可以像这样加载你的场景:

SceneManager.LoadScene("SceneName");

或者用场景索引:

SceneManager.LoadScene(sceneIndex); 

我可以看到您一直保持高分,这可能是您不这样做的原因。您应该像这样使用 PlayerPrefs 保存您的高分:

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

然后你可以很容易地把它拿回来:

PlayerPrefs.GetInt("High Score");

这实际上保存了您的分数,因此即使他们退出游戏并返回,您仍然可以取回它。 More info on PlayerPrefs.

【讨论】:

  • @CổChíTâm 是的,你可以使用PlayerPrefs.Save(),以防游戏崩溃,所以你可以在某些检查点使用它,但你不需要把它放在OnApplicationQuit(),因为它被调用了默认。并且在实际游戏过程中尽量不要使用PlayerPrefs.Save(),不推荐。
猜你喜欢
  • 2014-05-16
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多