關於Unity2018的實體元件系統(通用名稱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學習中心查詢。
相關文章
- 元件-實體-系統 (ECS \CES)遊戲程式設計模型元件遊戲程式設計模型
- (七)系統通用元件編寫元件
- 更改Linux系統的網路卡名稱Linux
- 公告|關於綠盟科技主體公司名稱變更通知
- 實驗課程名稱:資料庫系統概論資料庫
- Unity2018 ECS(pure)報錯 Material needs to enable instancing for use with DrawMeshInstanced.Unity
- 關於System.Web.Script.Serialization名稱空間的引用Web
- 修改 Ubuntu 系統使用者名稱和登入名Ubuntu
- win10系統更改管理員名稱的方法Win10
- windows10系統更改賬戶名稱的方法Windows
- 4.3.2.2 關於CDB Root和PDB$SEED檔案的名稱和位置
- Win10系統下如何修改電腦名稱?windows10更改電腦名稱的方法Win10Windows
- Win10雙系統怎麼改啟動項名稱 win10雙系統修改啟動項名稱的步驟Win10
- 關於實時推送系統的那點事
- Android Q:新系統名稱和新特性整理Android
- DDD統一通用語言:軟體工程不是關於技術,而是關於溝通軟體工程
- Sql Server關於許可權、角色以及登入名、使用者名稱的總結SQLServer
- 關於 maatwebsite/excel 匯出不能識別中文檔名稱的問題WebExcel
- 關於mes系統硬體配置問題
- windows10系統怎麼更改我的文件名稱Windows
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- 開源軟體名稱中的故事
- 從《守望先鋒》學習關於ECS的概述
- 如果想用ECS實現技能系統有什麼好的思路
- 基於SSM框架的JavaWeb通用許可權管理系統SSM框架JavaWeb
- 基於Laravel5.8實現的元件化後臺管理系統Laravel元件化
- C#學習 [型別系統] 名稱空間(12)C#型別
- windows10系統如何修改藍芽裝置名稱Windows藍芽
- windows10系統怎麼修改計算機名稱Windows計算機
- 關於linux類系統的操作Linux
- win10檔名稱亂碼怎麼辦 win10系統檔名稱亂碼處理方法Win10
- 如何將Windows作業系統使用者名稱的中文名稱修改為英文名稱【親測有效】Windows作業系統
- Centos系統更換網路卡名稱為eth0教程CentOS
- win10系統下無法更改賬戶名稱的解決方法Win10
- Win10系統修改開始選單中應用名稱的方法Win10
- git 使用者名稱密碼相關Git密碼
- 關於React的高階元件React元件
- 分散式系統–>(關於系統應用的基本概念)分散式