Unity DOTS System與SystemGroup概述
?最近DOTS終于發(fā)布了正式的版本,?我們來分享以下DOTS里面System關(guān)鍵概念,方便大家上手學習掌握Unity DOTS開發(fā)。 ? ??System是迭代計算與處理World中的Entity實體的Component Data數(shù)據(jù)的邏輯代碼。System對應(yīng)的代碼是運行在main thread上的。World里面所有的System通過SystemGroup來進行管理,?通過SystemGroup, 來決定了每個System的迭代順序。 ??System分為托管對象與非托管對象兩種模式,?定義托管對象System的時候,定義一個class, 繼承自SystemBase, 定義非托管對象的時候,定義struct 繼承自ISystem。 System有三個常用的接口,可以供用戶重寫,接口包含如下: OnUpdate: 每幀刷新的時候調(diào)用一次; OnCreate: System創(chuàng)建的時候被調(diào)用; OnDestroy: System 對象銷毀的時候被調(diào)用; ? ??每個System只能迭代它所在的World中的Entity, 每個System在創(chuàng)建的時候會有一個數(shù)據(jù)成員World指向它所在的World,我們可以通過system實例.World來獲取。 ? ??Unity運行的時候,默認會創(chuàng)建一個World, 并創(chuàng)建默認的SystemGroup,它們分別是: InitializationSystemGroup SimulationSystemGroup PresentationSystemGroup 同時會掃描當前所有的System類,為每個System類創(chuàng)建一個實例放到SystemGroup中,運行后該System就會被迭代計算到。默認創(chuàng)建的System,如果你沒有指定分組,默認會創(chuàng)建到SimulationSystemGroup分組中,如果System需要創(chuàng)建到特定的分組,可以通過屬性裝飾器[UpdateInGroup]。 如果不想要系統(tǒng)默認創(chuàng)建,可以定義宏關(guān)閉掉: UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP ? ? System有以下的一些類型,可以供開發(fā)者使用,類型如下: SystemBase: 基于托管類的System; ISystem: 基于非托管類的System; EntityComponentBufferSystem: 為其它的System提供entity 命令緩沖區(qū); ComponentSystemGroup: 嵌套System的層級關(guān)系與Update的順序; ? 每個SystemGroup可以包含System與子SystemGroup,可以通過重寫SystemGroup的update來決定System的迭代順序。可以通過System Window來查看當前系統(tǒng)的所有System與層級關(guān)系,如下圖所示: