關於Unity2018的實體元件系統(通用名稱ECS)

1405048499729402發表於2019-01-27

將介紹如何在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學習中心查詢。

 


相關文章