繁体   English   中英

正确重置场景并保持Unity得分

[英]Correctly reset Scene and keep score in Unity

因此,我正在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盐对象成为它的子对象就可以了,这样我就可以删除SaltManager,然后所有子对象也消失,但是我不知道怎么做这样做,反正似乎并不太有效。 任何帮助将不胜感激! 谢谢! 布兰登

我建议您通过重新加载场景来重置游戏,以使它完全像开始时一样。 您可以像这样加载场景:

SceneManager.LoadScene("SceneName");

或与场景索引:

SceneManager.LoadScene(sceneIndex); 

我可以看到您保持着高分,这可能就是为什么您没有那样做的原因。 您应该这样保存PlayerPrefs的高分:

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

然后,您可以轻松地将其恢复为:

PlayerPrefs.GetInt("High Score");

这实际上可以保存您的得分,这样即使他们退出游戏并回来了,您仍然可以找回它。 有关PlayerPrefs的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM