簡體   English   中英

從最后一個場景開始游戲Unity 3D

[英]Start Game from the Last Scene Unity 3D

關閉游戲並重新打開后,我想加載最后一個場景,以便玩家可以從達到的水平繼續。 正如您在下面的代碼中所見,我已經嘗試使用PlayerPrefs,但是游戲在啟動時崩潰。

GameManager腳本:

    bool GameHasEnded = false;
    public float RestartDelay = 2f;
    public float NextLevelDelay = 5f;

    int level_index;

    private void Start()
    {

        level_index = PlayerPrefs.GetInt("Last_Level");
        SceneManager.LoadScene(level_index);


    }

    public void CompleteLevel()
    {
        Invoke("NextLevel", NextLevelDelay);
        level_index = level_index++;
        PlayerPrefs.SetInt("Last_Level", level_index);
    }

    public void EndGame()
    {
        if (GameHasEnded == false)
        {
            GameHasEnded = true;
            Invoke("Restart", RestartDelay);
        }
    }

    void NextLevel()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex +1);
    }

    void Restart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().path);
    }
}

所有場景都與GameManager鏈接,它們都具有加載下一個場景的相同代碼:

FindObjectOfType<GameManager>().CompleteLevel();

您需要為GetInt指定一個defaultValue ,以便它第一次啟動時可以選擇適當的場景開始。

另外,您需要跟蹤場景開始時是否已經加載,並且僅在尚未發生時才執行此加載。 GameManager似乎應該將它做成一個單例,但是由於不是這樣,您可以將這個loaded標志GameManager靜態,因此這在所有GameManager實例中都很常見。

總共看起來可能像這樣:

public readonly int defaultLastLevel = 1; // Set as appropriate
private static bool loaded = false;

void Start()
{
    if (!loaded) {
        loaded = true;
        level_index = PlayerPrefs.GetInt("Last_Level", defaultLastLevel);
        SceneManager.LoadScene(level_index);
    }
}

另外,您的CompleteLevel具有一些非常奇怪的代碼,您可以在其中進行后遞增並在同一行中進行分配:

level_index = level_index++;

這是很難讀懂的,實際上並沒有做你想做的事情 您可以執行level_index = SceneManager.GetActiveScene().buildIndex + 1; 代替。

另外,還需要使用PlayerPrefs.Save(); SavePlayerPrefs PlayerPrefs.Save();更改PlayerPrefs.Save();

總之,這使您的CompleteLevel看起來像這樣:

public void CompleteLevel()
{
    Invoke("NextLevel", NextLevelDelay);
    level_index = SceneManager.GetActiveScene().buildIndex + 1; // use this instead
    PlayerPrefs.SetInt("Last_Level", level_index);
    PlayerPrefs.Save();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM