關於Unity 2018的實體組件系統(通用名稱ECS)

將介紹如何在Unity上使用實體組件系統(通常稱爲ECS)。

這次的內容是Unity提供的ECS API的基本用法,一個小應用程序和並行化。

它不包括與Unity的GameObject / Component的合作,以及實際使用。
獲取可以使用ECS的編輯器
Unity2018 和之後的版本都可以!
創建一個可以使用ECS的項目
要啓用ECS,需要兩件事。
· 使使用 .NET 4.x
· 重寫 manifest.json
正常啓動Unity並打開 Edit> PlayerSettings> PlayerSettings。
之後,將Scripting Runtime Version腳本運行時版本更改爲Stable (.net 4.x)。
接下來是重寫manifest.json。
由於在項目的Root文件夾/ Packages中有一個名爲manifest.json的文件,因此我們將按照https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/TwoStickShooter/Pure/Packages/manifest.json 與此處相同的方式重寫內容。

準備工作完成。

最小的ECS項目
首先,嘗試儘可能地構建最有意義的功能。
這次要組織的功能就是這樣
· 統計每個幀

1、 沒有使用 ECS的代碼 :
首先我會試着用MonoBehaviour來組織它。這是一個非常簡單的代碼。
編寫完成後,您可以將Counter組件添加到適當的GameObject中。
using UnityEngine;public class Counter : MonoBehaviour{ public int count;void Update () { count++; }} 

接下來,讓我們對應於ECS。有三件事要做
它是什麼?麻煩? ECS就是這樣

· CountData 計數的值
· CountSystem 實際計數
· ECSMain 實體
ComponentDatas.cs
using Unity.Entities; // 實體public struct CountData : IComponentData{public int count;} 

CountSystem.cs
using Unity.Entities; public class CountSystem : ComponentSystem{// System所需的ComponentData列表struct Group{public int Length;public ComponentDataArray<CountData> countData;} [Inject] Group group; // 注入請求的ComponentData // 調用每一幀protected override void OnUpdate(){for(int i=0; i<group.Length; i++){var countData = group.countData[i];countData.count++;group.countData[i] = countData;}}} 
ECSMain.cs
using UnityEngine;using Unity.Entities; public class ECSMain : MonoBehaviour{void Start (){// 獲取EntityManagervar entityManager = World.Active.GetOrCreateManager<EntityManager>(); // 定義實體的原型var sampleArchetype = entityManager.CreateArchetype(typeof(CountData)); // 實際上基於原型生成實體entityManager.CreateEntity(sampleArchetype);}} 
之後,如果您將ECSMain附加到適當的對象並Play,則第一步完成。
在Play期間,打開Window > EntityDebugger,當它從Systems列表中找到CountSystem時,它會變白,並且如果實體存在 。
如果沒有實體,那麼您有可能在沒有CountData的情況下創建實體,或者您沒有首先創建實體。另外,如果您沒有系統,則創建ComponentSystem的代碼有問題。

更多unity2018的功能介紹請到paws3d學習中心查找。

 

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