文章目录一.ECS简介二.基本操作实例三.实体查看组件四.位置实体修改五.旋转实体六.了解原有属性七.禁止自动创建八.动态实例化一.ECS简介ECS全称 (Entity Component System).即(E:实体 C:组件 S:系统).实际上即是数据方法分离.数据放在组件里,具体实现放在系统里.组件挂载在实体上.为了让大家快速了解,本次介绍是以下内容:下面举个简单的的例子:二.基本操作实例1.创建数据组件,继承IConponentData接口2.系统组件创建一个系统继承ComponentSystem3.创建一个中转组件,这样我们就可以将此脚本挂在物体上(比如一个Cube),这个脚本生成PrintComponentData1并挂在物体上.此时该物体刚成为一个实体4.运行后实体在编辑器场景列表中的Hierarchy中是看不到的不过我们可以看到打印.我们需要使用场景查看组件来查看三.实体查看组件通过菜单栏Windows Analysis Entity Debugger在这个列表中可以看到正在运行的物体及系统四.位置实体修改此设置后,挂载ConterToEnitiy组件的位置将被设置为 1,1,1,相当于Position五.旋转实体1.创建该脚本挂载物体上2.创建该脚本,即可通过Foreach的方式,找到所有RotationEulerXYZ的脚本进行旋转六.了解原有属性通过可以查看视图 对象浏览器,发现我们的Transform是包含了很多冗余的内容,其实并不一定会用到.七.禁止自动创建系统在程序中即使不挂载也会自动运行,下面介绍一个系统特性.使用DisableAutoCreation即可禁止自动运行.八.动态实例化1.创建ECS预制体,挂载以上两个插件2.编写代码usingUnity.Entities;usingUnityEngine;publicclassECSPrefabCreator:MonoBehaviour{publicGameObjectcube;// Start is called before the first frame updatevoidStart(){//对于Cube的设置GameObjectConversionSettingstempSettingsGameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld,null);EntitytempEntityPrefabGameObjectConversionUtility.ConvertGameObjectHierarchy(cube,tempSettings);//获取全局物体管理器EntityManagertempEntityManagerWorld.DefaultGameObjectInjectionWorld.EntityManager;//物体实例化EntitytempCubetempEntityManager.Instantiate(tempEntityPrefab);}}3.挂载脚本4.修改位置TranslationtempTranslationnewTranslation();for(inti0;isum;i){for(intj0;jsum;j){//物体实例化EntitytempCubetempEntityManager.Instantiate(tempEntityPrefab);//设置位移tempTranslation.Value.xinterval;tempEntityManager.SetComponentData(tempCube,tempTranslation);}//设置位移tempTranslation.Value.x0;//设置位移tempTranslation.Value.yinterval;}通过以上代码我们先将挂载了Entity的脚本在预设进行转换然后再将其实循环创建后修改其他位置排列在一个等长宽的阵列。
Unity DOTS技术(二)ECS
文章目录一.ECS简介二.基本操作实例三.实体查看组件四.位置实体修改五.旋转实体六.了解原有属性七.禁止自动创建八.动态实例化一.ECS简介ECS全称 (Entity Component System).即(E:实体 C:组件 S:系统).实际上即是数据方法分离.数据放在组件里,具体实现放在系统里.组件挂载在实体上.为了让大家快速了解,本次介绍是以下内容:下面举个简单的的例子:二.基本操作实例1.创建数据组件,继承IConponentData接口2.系统组件创建一个系统继承ComponentSystem3.创建一个中转组件,这样我们就可以将此脚本挂在物体上(比如一个Cube),这个脚本生成PrintComponentData1并挂在物体上.此时该物体刚成为一个实体4.运行后实体在编辑器场景列表中的Hierarchy中是看不到的不过我们可以看到打印.我们需要使用场景查看组件来查看三.实体查看组件通过菜单栏Windows Analysis Entity Debugger在这个列表中可以看到正在运行的物体及系统四.位置实体修改此设置后,挂载ConterToEnitiy组件的位置将被设置为 1,1,1,相当于Position五.旋转实体1.创建该脚本挂载物体上2.创建该脚本,即可通过Foreach的方式,找到所有RotationEulerXYZ的脚本进行旋转六.了解原有属性通过可以查看视图 对象浏览器,发现我们的Transform是包含了很多冗余的内容,其实并不一定会用到.七.禁止自动创建系统在程序中即使不挂载也会自动运行,下面介绍一个系统特性.使用DisableAutoCreation即可禁止自动运行.八.动态实例化1.创建ECS预制体,挂载以上两个插件2.编写代码usingUnity.Entities;usingUnityEngine;publicclassECSPrefabCreator:MonoBehaviour{publicGameObjectcube;// Start is called before the first frame updatevoidStart(){//对于Cube的设置GameObjectConversionSettingstempSettingsGameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld,null);EntitytempEntityPrefabGameObjectConversionUtility.ConvertGameObjectHierarchy(cube,tempSettings);//获取全局物体管理器EntityManagertempEntityManagerWorld.DefaultGameObjectInjectionWorld.EntityManager;//物体实例化EntitytempCubetempEntityManager.Instantiate(tempEntityPrefab);}}3.挂载脚本4.修改位置TranslationtempTranslationnewTranslation();for(inti0;isum;i){for(intj0;jsum;j){//物体实例化EntitytempCubetempEntityManager.Instantiate(tempEntityPrefab);//设置位移tempTranslation.Value.xinterval;tempEntityManager.SetComponentData(tempCube,tempTranslation);}//设置位移tempTranslation.Value.x0;//设置位移tempTranslation.Value.yinterval;}通过以上代码我们先将挂载了Entity的脚本在预设进行转换然后再将其实循环创建后修改其他位置排列在一个等长宽的阵列。