亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解鎖關卡并從 Unity 2D 中的獲勝頁面跳轉到下一個場景?

如何解鎖關卡并從 Unity 2D 中的獲勝頁面跳轉到下一個場景?

C#
慕斯709654 2022-10-23 16:36:54
關卡完成后,將顯示獲勝屏幕。其中有兩個按鈕繼續和菜單。我已經設法停用按鈕,只保持第一級按鈕解鎖,但當我清除 1 級時無法解鎖 2 級按鈕。我也希望繼續按鈕在它之后跳轉到 2 級在完成關卡 1 時顯示在下一個場景中。這個游戲是突圍風格,這些是我無法解決的問題。我附上了我認為必要的相應腳本。如果你想要其他人請在評論中詢問他們。所有腳本的完整列表在最后。我真的很感激一些幫助。如果你要求他們,我一定會嘗試更多地解釋我的問題。所以請稍后再檢查這個問題以檢查更改。下面的腳本附加到第 1 級:-{[SerializeField] int breakableBlocks;  // Serialized for debugging purposesSceneLoader sceneloader;private void Start(){    sceneloader = FindObjectOfType<SceneLoader>();}public void CountBreakableBlocks(){    breakableBlocks++;}public void BlockDestroyed(){    breakableBlocks--;    if (breakableBlocks <= 0)    {        GetComponent<LevelSelector>().levelunlocked =         sceneloader.LoadWinScreen();    }}}下面的腳本附加到級別選擇器:-{    public Button[] levelButtons;    public int levelunlocked = 1;    private void Start()    {        int levelReached = PlayerPrefs.GetInt("levelReached", levelunlocked);        for (int i = 0; i < levelButtons.Length; i++)        {            if (i + 1 > levelReached)            {                levelButtons[i].interactable = false;            }        }    }}
查看完整描述

1 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

我認為您的問題源于在離開您的 1 級場景之前沒有更新您的“levelReached”玩家偏好值。


在您發布的 1 級腳本中:


public void BlockDestroyed()

    {

        breakableBlocks--;

        if (breakableBlocks <= 0)

        {

            GetComponent<LevelSelector>().levelunlocked = 

            sceneloader.LoadWinScreen();

        }

    }

當您的 LoadWinScreen 函數返回 void 時,以下行應該會引發錯誤:


GetComponent<LevelSelector>().levelunlocked = 

            sceneloader.LoadWinScreen();

嘗試將該部分代碼更改為以下內容:


if (breakableBlocks <= 0)

{

    PlayerPrefs.SetInt("levelReached", 2);

    sceneloader.LoadWinScreen();

}

請注意,在上面的示例中,我假設您有一個單獨的腳本運行每個級別的游戲邏輯,因為我沒有使用變量來設置新的 PlayerPrefs“levelReached”值。我建議在每個場景中都有一個 GameManager 腳本并跟蹤您當前所處的關卡,這將允許您執行以下操作:


if (breakableBlocks <= 0)

{

    if(PlayerPrefs.GetInt("levelReached") < GameManager.currentLevel + 1)

        PlayerPrefs.SetInt("levelReached", GameManager.currentLevel + 1);

    sceneloader.LoadWinScreen();

}

這需要一些單獨的邏輯來承載跨場景的游戲狀態,并且有幾種方法可以解決這個問題(參見下面的示例和相關的 stackoverflow 鏈接):

  • 使用 Unity DontDestroyOnLoad 函數的單例設計模式

  • ScriptableObjects 在關卡開始存儲和檢索數據

  • PlayerPrefs 在關卡開始時存儲和檢索數據

unity - 在場景之間傳遞數據


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號