2017-03-04 73 views
0

好吧,這應該比它簡單得多!或者我被我自己的無知所矇蔽了!Unity 5.5.1 - 獲取最後一級加載?

我想要的是獲取最後播放級別的字符串名稱的一些手段。

澄清:

所有可玩級別給出的順序名字 - 「Level_01」 直通 「Level_100」。

這些場景都包含「主菜單」和「最後一級回放」等按鈕,所有非可播放場景都會給出名稱,如「開始菜單」和「級完成」。我不使用UI系統,也不希望這樣做。相反,我用對撞機設置對象,並使用我的遊戲機制充當「按鈕」。例如,當玩家拍攝名爲「Replay Last Level」的按鈕時,OnCollisionEnter2D應該加載上一次播放的級別。

只要玩家完成或失去等級,他們就會被帶到「LevelCompleted」並顯示一些遊戲統計數據(分數,時間等)。他們有三個選擇:「主菜單」,「重播上一級」和「繼續」。

我需要的僅僅是,總是包含先前加載PLAYABLE級別的名稱的字符串變量(即那些喜歡「Level_01」,而不是名稱,如「開始菜單」。)

然後,我將使用字符串在適當的地方進入我的GameManager腳本。播放器拍攝「Replay Last Level」時,最後播放的級別將會加載。當玩家發射「繼續」時,我想玩下一個可玩的關卡。

非常簡單的概念:我剛剛失去了「Level_02」。我現在在「LevelCompleted」中。我拍「重播最後一級」。我再次輸入「Level_02」。相反,如果我拍攝「繼續」,則會將我帶到下一個可播放級別,在此情況下,如果該級別已解鎖,則爲「Level_03」。如果它沒有被解鎖,那麼「繼續」按鈕會將我帶回「level_02」。

順便說一句,我有一個GameManager腳本,否則空的遊戲對象。這是一個堅持每個場景的單身人士。在這個腳本中有兩個類 - 一個是主要的公共類,它是單身人士,用大數組中的數據做一大堆東西 - 另一個只是一個可序列化的「公共類GameData」。它只包含寫入文件的變量,然後在遊戲過程中根據需要重新加載。

回答

1

因此,通常情況下,答案比我想的要簡單!

在我的Gamemanager腳本中,我設置了一個公共靜態字符串變量「currentLevel」。

然後在清醒()我這樣做:

Scene scene = SceneManager.GetActiveScene(); 
    if (scene.name != "LevelCompleted") 
    { 
     currentLevel = scene.name; 
    } 

我意識到,我的「LevelCompleted」的場景絕不會像「開始菜單」另一種「非可玩」的場景被打開,它不僅會以「Level_xx」之類的可播放級別打開。通過使用條件,它可以確保在打開該場景「LevelCompleted」時,變量不會被單例GameManager更新,因此該變量將始終包含最後播放的可播放級別。

在現場 「LevelCompleted」 按鈕,在 「重播最後一級」,我有:

private string lastLevelPlayed; 

void OnCollisionEnter2D(Collision2D collision) 
{ 
    lastLevelPlayed = GameManager.currentLevel; 
    SceneManager.GetSceneByName(lastLevelPlayed); 
}