ECS的核心概念,關于ecs使用規范正確的是ECS的核心概念ECS架構的核心是數據,這也是Unity將這項技術命名為stack DOTS的原因。系統讀取實體上方組件的數據流并處理數據。在這里,實體實際上更像一個索引,它不包含任何數據或邏輯。EC由三部分組成:實體、組件和行為。見下圖:在此圖中,系統讀取多個實體的平移和旋......
ECS架構的核心是數據,這也是Unity將這項技術命名為stack DOTS的原因。系統讀取實體上方組件的數據流并處理數據。在這里,實體實際上更像一個索引,它不包含任何數據或邏輯。
EC由三部分組成:實體、組件和行為。見下圖:
在此圖中,系統讀取多個實體的平移和旋轉組件,然后在計算和處理后將結果更新到LocalToWorld組件。
如圖所示,實體A和B仍然有渲染器組件,但C沒有。但是,這不會影響系統的計算邏輯,因為這個系統不關心渲染器組件。
也可以寫一個需要處理渲染器組件的系統,讓系統忽略實體c,也可以寫一個排除包含渲染器組件的實體的系統,讓系統忽略實體A和實體b。
以下是ECS中一些重要的核心概念:
原型原型
多個組件的組合稱為原型。
例如,3D對象可以包含用于變換的組件,包括移動、旋轉和渲染。每個3D對象對應一個實體,但它們都有相同的組件,因此ECS會將它們歸類為一種原型。
上圖中,實體A和實體B的原型都是M,實體C的原型是n。
您還可以通過在運行時添加或刪除組件來更改實體的原型。例如,如果實體B的渲染器組件被移除,則實體B的原型將變成n。
內存塊
為什么先說原型的概念?因為實體的原型是什么決定了ECS將實體的組件即數據存儲在哪里。Ec以塊為單位分配內存,每個塊由一個原型塊對象表示。
一個塊只包含一個原型,原型可以包含多個實體的數據。如果一個塊的內存已滿,ECS將分配一個新的塊來存儲新實體的組件。
如果修改了實體的組件,就相當于修改了實體的原型。此時,ECS會將實體的組件數據移動到另一個塊。
原型和內存塊的關系是一對多的關系。這意味著,如果您想要查詢一組給定組件類型的所有實體,您只需要在這些原型中進行搜索。這將比在所有實體中搜索高效得多。
ECS在存儲實體到內存塊中沒有特殊的順序。當一個實體被創建或者一個實體的原型發生變化時,ECS會把它放到對應原型中第一個有空間的內存塊中。塊中的數據將緊密排列。如果要將一個實體移出當前原型的內存塊,此時會有一個空位,ECS會將這個內存塊的最后一個實體數據移到這個空位上。
注意:原型中共享組件的數據(后面會詳細描述)也會影響實體將存儲在哪個內存塊中。同一內存塊中所有實體的共享組件中的數據值是相同的。如果修改共享組件中的數據,實體將被移動到另一個塊中,這有點類似于修改實體的原型。
將共享組件的實體劃分到一個內存塊中將提高處理它們的速度。例如,Hybird Renderer定義了RenderMesh組件來實現這一目標。
實體查詢
系統在什么基礎上決定處理哪些實體?這將使用稱為實體查詢的東西。實體查詢首先需要一些組件類型,然后根據你傳入的組件類型組合,在包含這些組件的原型中查詢符合要求的實體。查詢時可以指定以下三種類型:
All必須包含所有組件類型。
任何必須在任何中包含至少一個組件類型。
None中不能包含任何組件類型。
實體查詢的結果將返回滿足查詢要求的所有內存塊。您可以使用IJobChunk遍歷所有組件。(IJobChunk后面會講到。)
作業作業
如前所述,ECS只有在與Job一起使用時才能發揮多線程的威力。ECS提供了包含實體的SystemBase類。ForEach方法,還包含IJobChunk的Schedule()和ScheduleParallel()方法,可以處理子線程中的數據。實體。ForEach是最簡單的方法,只需幾行代碼就可以實現。IJobChunk可以用來處理更復雜的情況。
ECS將根據系統的順序在主線程中調度作業。當調度作業時,ECS將跟蹤哪些作業正在讀取和寫入哪些組件。需要讀權限的作業需要等到上一個具有寫權限的作業完成執行,反之亦然。作業調度器將使用作業相關性來決定哪些作業可以并行,哪些作業必須串行。
系統的組織
歐共體通過世界和集團組織系統。默認情況下,ECS將使用一些預定義的組創建一個默認世界。它將找到項目中的所有系統,實例化它們,并將它們添加到預定義的組中。
您可以在同一組中指定系統更新的執行順序。組也是一個系統,所以您可以將一個組添加到另一個組中。如果不指定順序,系統的執行順序將是不確定的,它不會遵循它們被創建的順序。但是,同一組中的所有系統將在下一組中的系統之前執行。
系統的更新是在主線程中執行的,但是您可以使用Job將工作分配給子線程。
ECS世界的視覺創作(創作)
在Unity中,沒有辦法直接在視覺上創建DOTS世界。不過可以先用GameOjbect和MonoBehaviour創建,然后通過轉換系統把GameObject轉換成實體和組件。我們以后再談這個。
來源:Unity官方平臺
原文:https://mp.weixin.qq.com/s/Tvtqz51Np7vWeYwKcQtHdQ
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部