2018年6月10日 星期日

[UNITY 範例檔] 場景間轉換動畫

本範例檔示範一個如何製作兩個場景間過場的Loading 進度條功能 (包跨動畫)。

線上玩
專案檔下載

【前言】
假設我們現在正開啟著 Scene_A,並透過下面程式碼來切換至 Scene_B 場景:
SceneManager.LoadSceneAsync(“Scene_B”)

那Unity實際上的運作將會是如下

  1. Hierarchy 中存著 Scene_A 場景,開始載入Scene_B
  2. 載入 Scene_B 完成後將 Scene_B 開啟
  3. 將 Scene_A 關閉。

從上述步驟可發現 Unity 是等 Scene_B 載入完成後才將 Scene_A 關閉。
這樣的過程會造成遊戲記憶體出現 Scene_A +Scene_B 的高使用量。

假設這兩個場景都需要 10mb 的記憶體,
那這個場景切換的過程將會出現需要 20mb 記憶體的情況發生。

【改進方式】
為了避免不必要的記憶體突增狀況發生,
本範例檔案則是新增一個名叫 Empty.unity 的"空場景檔"作為過度使用。
這個空場景檔實際作用的流程如下:


    1. Hierarchy 中存著 Scene_A 場景,開始載入Empty 場景
    2. 載入 Empty 完成後將 Empty 開啟
    3. 將 Scene_A 關閉,並且開始載入 Scene_B
    4. 載入 Scene_B 完成後將 Scene_B 開啟
    5. 將 Empty 關閉。
    總之我們從Scene_A直接載入Scene_B,
    而是從Scene_A載入Empty,再從Empty載入Scene_B。

    這樣的好處是什麼呢?
    假設Scene_A跟Scene_B都是10mb、Empty只有1mb的話,
    我們在轉換場景的過程中,最多也就需要 11mb 而已。

    【本範例檔的Build Settings】

    【GameManager】
    其實本範例也參考了官方範例,如何撰寫一個GameManagrer 
    https://unity3d.com/learn/tutorials/projects/2d-roguelike-tutorial/writing-game-manager

    2 則留言: