Unity DOTS入门教程(Unity2019)
使用Unity官方新開發的DOTS技術可以讓開發者在Unity中創建大量游戲物體而不卡頓,本課程旨在讓大家快速入門Unity的DOTS技術,了解和掌握DOTS技術的使用方式。
一、概述
DOTS(Data-Oriented Technology Stack):數據導向型技術堆棧;
傳統方式遇到的問題:
1.數據冗余;
2.單線程處理;
3.編譯器問題;
針對傳統問題,DOTS技術帶來的三種解決辦法:
1.ECS(Entity Component System):數據和行為分離;
2.Job System:多線程,充分發揮多核CPU的特性;
3.Burst Complier:編譯生成高效的代碼;
二、開發環境搭建
1.安裝Entities
打開Unity2019,點擊Window→點擊Package Manager→點擊Advanced→選中Show preview packages→找到列表里的"Entities"→點擊右下角的“Install”進行安裝;
2.安裝Hybrid Renderer
點擊Window→點擊Package Manager→點擊Advanced→選中Show preview packages→找到列表里的"Hybrid Renderer"→點擊右下角的“Install”進行安裝;
三、最簡單的ECS程序
例如:打印一個數字:
1.創建組件腳本PrintComponentData.cs:
using Unity.Entities; public struct PrintComponentData : IComponentData {public float printData; }2.創建系統腳本PrintSystem.cs:
using UnityEngine; using Unity.Entities;public class PrintSystem : ComponentSystem {protected override void OnUpdate(){Entities.ForEach((ref PrintComponentData printComponentData)=>{Debug.Log(printComponentData.printData);});} }3.創建實體需要掛載的腳本PrintAuthoring.cs:
using UnityEngine; using Unity.Entities;public class PrintAuthoring : MonoBehaviour, IConvertGameObjectToEntity {public float printData;public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem){dstManager.AddComponentData(entity, new PrintComponentData() { printData=printData});} }4.給實體掛載腳本ConvertToEntity.cs和PrintAuthoring.cs:
四、調試面板介紹
顯示出場景中的所有實體:
點擊Window→點擊Analysis→選中Entity Debugger→點擊運行按鈕即可看到場景中所有的實體及相關的組件;
五、默認組件的使用
創建腳本TranslationSystem.cs,如下:
using Unity.Entities; using Unity.Transforms; using Unity.Mathematics;public class TranslationSystem : ComponentSystem {protected override void OnUpdate(){Entities.ForEach((ref Translation translationComponentData) =>{translationComponentData.Value = new float3(1, 1, 1);});} }運行后如下:
六、Transform命名空間下組件的使用
1.創建腳本RotationEulerXYZAuthoring.cs,如下:
using UnityEngine; using Unity.Entities; using Unity.Transforms;public class RotationEulerXYZAuthoring : MonoBehaviour, IConvertGameObjectToEntity {public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem){dstManager.AddComponentData(entity, new RotationEulerXYZ());} }2.創建腳本RotationEulerXYZSystem.cs,如下:
using Unity.Entities; using Unity.Mathematics; using Unity.Transforms;public class RotationEulerXYZSystem : ComponentSystem {protected override void OnUpdate(){Entities.ForEach((ref RotationEulerXYZ rotationEulerXYZComponentData) =>{rotationEulerXYZComponentData.Value = new float3(45, 45, 45);});} }3.運行后如下:
七、屏蔽系統之間的互相干擾
通過上面的例子,我們會發現,在六里面,Cube旋轉的同時也發生了位移。說明雖然是不同的場景,但是腳本依然會對其他場景的物體造成影響:
在這里我們只需要加個[DisableAutoCreation],就可以了:
using Unity.Entities; using Unity.Transforms; using Unity.Mathematics;[DisableAutoCreation] public class TranslationSystem : ComponentSystem {protected override void OnUpdate(){Entities.ForEach((ref Translation translationComponentData) =>{translationComponentData.Value = new float3(1, 1, 1);});} }八、實例化ECS預制體
總結
以上是生活随笔為你收集整理的Unity DOTS入门教程(Unity2019)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: [动态规划]最长公共子序列
- 下一篇: Feep! search:一款面向程序员
