2017-09-13 207 views
0

我建立一個手機遊戲,和我的比賽應該包含加載場景和主場景

  • 加載屏幕與進步

  • 大廳屏幕

  • 遊戲畫面(與加載屏幕在遊戲加載之前)

遊戲中沒有特殊的關卡...

請注意,我需要能夠在場景之間共享GameObjects,例如我的網絡處理程序,它與我的服務器保持連接。

你將如何構建這個場景?場景創建的最佳實踐是什麼?

我能想到的下列選項:

  1. 兩個場景:加載場景+主場景和共享GameObjects:

    加載場景將是非常輕便的場景,這將只存在於 加載主場景。它可以根據 主場景加載和網絡登錄過程的進度顯示進度條。

    優點:該應用程序將加載快(顯示加載場景 同進)

    缺點:我將不得不分擔場景之間我的網絡處理器 (控股之後的連接登錄)。

  2. 兩個場景:加載場景+主場景不共享 GameObjects:

    我希望能夠開始加載主場景 異步,但沒有自動切換到它。我希望 主場景將例如啓動登錄過程,並且只有當 完成所有初始化任務時,它纔會通知加載 場景它已準備好進行切換。這可能嗎?我可以在後臺加載 場景並實際進行按需切換嗎? 此外,我需要能夠從主場景 獲得進度,以便在加載進度條中顯示它。

    優點:否 GameObjects共享是必需的 - 清潔和隔離的代碼。

    缺點:我是 不知道Unity是否有這種能力....

  3. 一個場景:

    優點:所有共享GameObjects是在一個地方

    缺點:申請非常緩慢的加載時間(除非有一個 選項告訴統一忽略幾個GameObjects的加載,然後我可以在顯示時間的加載屏幕中加載它們)。

謝謝!

回答

1

我會有3個不同的場景(每個屏幕一個場景),並使用SceneManagement.LoadScene()方法UnityEngine.SceneManagement從場景切換到場景。

要共享GameObjects場景之間,而更普遍地共享數據,你有3種選擇:

  • 使用一個靜態類:好股票價值
  • 使用DontDestroyOnLoad:要小心,不要有重複的對象在文件

如果你想就怎麼做的細節和這3個解決方案之間的差異使用

  • 存儲/加載數據的時候,我勸你這個教程:https://www.youtube.com/watch?v=WchH-JCwVI8 這是一個小時,但非常有用和完整,一切都在那裏。

  • 1

    我會建議有不同的屏幕有三個不同的場景。 「菜單場景」中可能有幾個「菜單屏幕」。

    對於分享gameobjects,你可以設置「DontDestroyOnLoad」你想分享的方向。從文檔:

    using UnityEngine; 
    using System.Collections; 
    
    public class ExampleClass : MonoBehaviour { 
        void Awake() { 
         DontDestroyOnLoad(transform.gameObject); 
        } 
    } 
    

    https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

    對於選項2: 我猜,直到它完成加載場景不會切換到主場景。但是,加載時可能會有點滯後,這可能表明您是否顯示加載動畫(例如微調)。

    也可以使用SceneManager.LoadSceneAsync,它將在後臺加載場景。我自己並沒有親身體驗過這一點,但可能有助於在主屏幕加載時保持加載屏幕更新。 https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html

    +0

    我的選擇2可能嗎? –

    +0

    我這麼認爲。我更新了我的回答:) –