關於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)遊戲程式設計模型元件遊戲程式設計模型
- DevOpsSOP:基於阿里雲ECS的通用系統安裝及初始化dev阿里
- (七)系統通用元件編寫元件
- 與軟體相關的職業名稱
- 更改Linux系統的網路卡名稱Linux
- 實驗課程名稱:資料庫系統概論資料庫
- 關於System.Web.Script.Serialization名稱空間的引用Web
- 修改 Ubuntu 系統使用者名稱和登入名Ubuntu
- 關於修改資料庫名稱和ID的方法總結資料庫
- win10系統更改管理員名稱的方法Win10
- windows10系統更改賬戶名稱的方法Windows
- Win10系統批次修改檔名稱的方法Win10
- 關於《推薦系統實踐》
- 關於大型監控系統的高效能元件設計元件
- Win10系統下如何修改電腦名稱?windows10更改電腦名稱的方法Win10Windows
- 4.3.2.2 關於CDB Root和PDB$SEED檔案的名稱和位置
- Win10雙系統怎麼改啟動項名稱 win10雙系統修改啟動項名稱的步驟Win10
- 關於實時推送系統的那點事
- DDD統一通用語言:軟體工程不是關於技術,而是關於溝通軟體工程
- 關於mes系統硬體配置問題
- Sql Server關於許可權、角色以及登入名、使用者名稱的總結SQLServer
- Oracle體系結構之-Oracle中各種名稱Oracle
- 關於 maatwebsite/excel 匯出不能識別中文檔名稱的問題WebExcel
- 關於訪問資料庫的使用者名稱和密碼資料庫密碼
- windows10系統怎麼更改我的文件名稱Windows
- Windows10系統更改使用者名稱的方法Windows
- Win10如何關閉系統元件功能 win10關閉系統元件功能的方法Win10元件
- 開源軟體名稱中的故事
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- 關於《JAVA實用系統開發指南》引申的~Java
- 從《守望先鋒》學習關於ECS的概述
- 如果想用ECS實現技能系統有什麼好的思路
- 基於SSM框架的JavaWeb通用許可權管理系統SSM框架JavaWeb
- ECS控制檯診斷系統
- Atitit.軟體名稱空間 包的命名統計 及命名錶(2000個名稱) 方案java package...JavaPackage
- 關於資料庫登陸名和資料庫使用者名稱的一點點心得資料庫
- 基於Laravel5.8實現的元件化後臺管理系統Laravel元件化
- windows10系統如何修改藍芽裝置名稱Windows藍芽