日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity DOTS入门教程(Unity2019)

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。