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