ECS三要素
组件、系统、管理器
在2018环境下的ECS环境配置
学习ECS项目,需要导入5个包
Entities
Mathematics 数学
Hybrid Render 混合渲染
Jobs
Burst
简单的ECS项目只需要安装前三个插件(我使用的是2018.4.34f1)

18版本HelloWorld
让一个cube在场景中旋转起来。
在场景中制作一个红色的Cube,并为它添加组件和系统两个脚本。RotationCubeComponent.cs和RotationCubeSystem.cs
RotationCubeComponent.cs
/***
* 使用Unity2018.4版本 开发ECS的HelloWorld
*
* 定义ECS的"组件" 组件只有数据 没有方法
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotationCubeComponent : MonoBehaviour
{
/// 旋转速度
public float speed;
}
RotationCubeSystem.cs
/***
* 使用Unity2018.4版本 开发ECS的HelloWorld
*
* 定义ECS的"系统" 只有方法没有数据
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities; // 引入命名空间
// 抽象方法
public class RotationCubeSystem : ComponentSystem
{
struct Group
{
public RotationCubeComponent rotation;
public Transform transform;
}
protected override void OnUpdate()
{
// GetEntities 2018所有 2019被废弃
foreach (var en in GetEntities())
{
// 进行旋转
en.transform.Rotate(Vector3.down, en.rotation.speed * Time.deltaTime);
}
}
}
RotationCubeComponent.cs继承MonoBehaviour可以直接拖拽到Cube上,但是系统无法添加到cube上。
此时需要添加Entities系统脚本Game Object Entity,可以把这个脚本当作管理脚本,把组件和系统关联起脸,放Cube可以运行起来。
在这个HelloWorld里,创建了两个脚本
继承MonnoBehaviour,内部定义Cube的旋转速度。
RotationCubeSystem.cs
继承ComponetSystem,定义Group的结构体,然后再OnUpdate()中使用foreach循环让Cube旋转。
GameObjectEntity.cs
属于Entitys命名空间中的内置脚本,作用是吧“组件”和“系统”结合起来
通过Demo回看ECS
下图是Unity官方的关于ECS的整体架构核心示意图。