ECS开发(一、)ECS是什么?

本文介绍了Unity中的ECS(实体-组件-系统)架构模式,包括实体作为基本对象,组件仅包含数据,系统用于处理数据。通过实例展示了如何创建实体、添加组件和构建系统,并讲解了如何使用EntityDebugger进行调试。同时,提到了如何通过[DisableAutoCreation]特性来阻止系统自动创建。

什么是ECS?

ECS是一种软件架构模式,由三个元素组成:实体(Entity),组件(Component)和系统(System)

E: Entity

一个不代表任何意义的实体(可以理解为Unity里的一个空的GameObject)

挂载 ConvertToEntity 组件

C: Component

一个只包含数据的组件(可以理解为Unity的一个自定义组件,里面只有数据,没有任何方法)

继承 IComponentData 接口

S: System

一个用来处理数据的系统(可以理解为Unity的一个自定义组件,里面只有方法,没有任何数据)

继承 ComponentSystem 基类

基础学习

ECS调试面板

EntityDebugger实体控制台

运行程序之后,可以在控制台,看到所有在使用的系统,我们新建的实体在面板上看不到,也在这里

新建一个实体Entity

手动新建一个对象,给它添加一个ConvertToEntity脚本,运行后,会发对象在Hierarchy面板上消失了,我们打开EntityDebugger实体控制台可以看到我们消失的实体和它的组件信息

新建一个数据组件Component

这个组件不能是class,因为class可以为null

而我们的数据组件不能为空,所以我们要使用结构体struct,而且它必须基础IComponentData接口

public struct TestComponentData : IComponentData
{
    public float testData ;
}

使用代理类,给实体添加组件

我们虽然新建了一个数据组件,但是因为没有继承Unity的MonoBehaviour所以不能像之前一样,直接把组件添加到实体上,所以我们需要使用代理类,替我们把组件添加给实体

public class Authoring : MonoBehaviour,IConvertGameObjectToEntity {
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        dstManager.AddComponentData(entity, new TestComponentData() { testData= 2 });
    }
}

新建一个系统System

我们的系统是不用挂载的,要继承ComponentSystem

public class PrintComponten : ComponentSystem {
    protected override void OnUpdate()
    {
        Debug.Log("打印信息");
    }
}

运行之后,我们的打印系统也在正常的工作 

 到这里,我们已经对ECS的三个部分有了最基础的了解了 

屏蔽系统之间的互相干扰

如果我们新建了一个System,会发现,只要运行程序,所有系统都会一直运行,其实有一个特性,可以让系统不能自动创建

[DisableAutoCreation]

[DisableAutoCreation]
public class TestTransformCorrelation : MonoBehaviour, IConvertGameObjectToEntity
{
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        dstManager.AddComponentData(entity, new RotationEulerXYZ());
    }
}

在类前面加上这个特性,系统就不会自动创建了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪小心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值