ECS官方案例4. SubScene

官方案例解析4

開始之前的準備工作:
0下載Unity編輯器(2019.1.0f1 or 更新的版本),if(已經下載了)continue;
1下載官方案例,打開Git Shell輸入:
git clone https://github.com/Unity-Technologies/EntityComponentSystemSamples.git --recurse
or 點擊Unity官方ECS示例下載代碼
if(已經下載了)continue;
2用Unity Hub打開官方的項目:ECSSamples
3在Assets目錄下找到HelloCube/4. SubScene ,並打開SubScene 場景

4. SubScene

這個案例演示子場景的工作流程,爲在Unity中編輯和加載大型遊戲場景提供一種高效方式。下面來一探究竟:

  • Main Camera ……主攝像機
  • Directional Light……光源
  • RotatingCube……旋轉的方塊?No,這是場景Scene

這次可不太一樣了,RotatingCube不在是之前的那對舞娘方塊兒了,而化身成爲一個場景。可即便是以更高級別的Scene出場,她始終逃不出旋轉的命運,突然覺得RotatingCube命運之憂傷,彷彿那首天后的歌:

旋轉的木馬沒有翅膀
但卻能夠帶着你到處飛翔
音樂停下來你將離場
我也只能這樣

一邊聽着《旋木》,一邊來看看主宰RotatingCube命運的SubScene腳本好了:

這個腳本主要將案例2的IJobForEach場景裏的那對方塊實體複用到這個場景中,提供了複用實體的解決方案
在編輯器中點擊Edit,就可以看到RotatingCube出現在場景中,這個時候它身上已經不再需要ConvertToEntity腳本了
因爲它本身將以實體的形式被創造出來,所以無需轉換

代碼做的就是這樣,因爲代碼篇幅較長,所以並沒有詳細註釋粘貼出來,有興趣的朋友不妨研究一下。
我比較看重如何使用SubScene的特性,以下是使用步驟:
0在Unity編輯器Hierarchy層級窗口中,選中想要添加到SubScene的父遊戲對象,這樣其子游戲對象也會隨着父親進入SubScene場景,鼠標右擊彈出下拉列表;
1在下拉列表的最下方,找到New SubScene from Selection選項,點擊該選項;
2接下來,Unity會將該對象及其子對象,一同移入到SubScene對象中,並在項目中創建一個Scene Asset文件;
3該Scene Asset文件會顯示在SubScene對象的Inspector檢視窗口中;
4我們還可以通過Inspector檢視窗口中的AutoLoadScene(是否自動加載)複選框來操縱其加載時機;
5也可以通過Inspector檢視窗口中的Edit(編輯)和Save(保存)按鈕來進行改動。

小結

那麼爲什麼ECS要使用SubScene呢?
原因很簡單,速度快,可以根據需求來快速加載場景資源。
看下SubScene的工作原理,也許就更加明白了!

SubScene 邏輯圖表

Save
memory-ready
Data
Load
Entities
Loaded
Schedule
OnUpdate
SubScene
Binary
RAM
Entities
Component
MainScene
DOTS
System
Burst
Jobs
ForEach

不知道有沒有畫明白整個流程,再大概解釋一下吧,當我們保存SubScene的時候,是以原生的二進制(Binary)形式來儲存的。這種原生二進制加載速度非常快,可以說是時刻準備着(memory-ready),它將以隨機存取儲存器RAM (Random Access Memory) 最小代價來加載。這種形式非常適合加載大量的實體,所以在主場景(MainScene)加載SubScene的時候,RAM將返回大量的實體到主場景中,從而完成子場景SubScene的加載。
這些從SubScene加載到主場景的大量的實體依然由DOTS來掌控,一旦加載完成就自動交接給DOTS了,剩下的東西在前面已經講過了,此處應該可以看明白了。
這裏要指出的是,這個流程是我根據表象來推測的,底層是否這麼做,關係並不大,我們只需要編寫ECS的代碼即可。

更新計劃

Mon 12Mon 19Mon 261. ForEach 2. IJobForEach 3. IJobChunk 4. SubScene 5. SpawnFromMonoBehaviour 6. SpawnFromEntity 7. SpawnAndRemove 休息修正更新計劃參加表哥婚禮進階:FixedTimestepWorkaround進階:BoidExample進階:SceneSwitcher我是休息時間 資源整合 部署服務器 啓動流程 登錄流程 遊戲主世界 待計劃 待計劃 待計劃 待計劃 待計劃 我是休息時間 待計劃 待計劃 待計劃 待計劃 待計劃 我是休息時間 讀取Excel自動生成Entity 讀取Excel自動生成Component讀取數據庫自動生成Entity讀取數據庫自動生成ComponentESC LuaFrameWork Skynet DOTS 官方示例學習筆記 -----休息-----基於ECS架構開發MMO學習筆記LuaFrameWork學習筆記-----休息-----基於Skynet架構開發服務器學習筆記 製作代碼自動生成工具總結基於Unity2019最新ECS架構開發MMO遊戲筆記

作者的話

AltAlt

如果喜歡我的文章可以點贊支持一下,謝謝鼓勵!如果有什麼疑問可以給我留言,有錯漏的地方請批評指證!
如果有技術難題需要討論,可以加入開發者聯盟:566189328(付費羣)爲您提供有限的技術支持,以及,心靈雞湯!
當然,不需要技術支持也歡迎加入進來,隨時可以請我喝咖啡、茶和果汁!( ̄┰ ̄*)

ECS系列目錄

ECS官方示例1:ForEach

ECS官方案例2:IJobForEach

ECS官方案例3:IJobChunk

ECS官方案例4:SubScene

ECS官方案例5:SpawnFromMonoBehaviour

ECS官方案例6:SpawnFromEntity

ECS官方案例7:SpawnAndRemove

ECS進階:FixedTimestepWorkaround

ECS進階:Boids

ECS進階:場景切換器

ECS進階:MegaCity0

ECS進階:MegaCity1

UnityMMO資源整合&服務器部署

UnityMMO選人流程

UnityMMO主世界

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章