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 在關卡開始時存儲和檢索數據
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報