Unity ECS学习(8)

接下来让我们继续看ISystem

ISystem

ISystem和SystemBase类似,但是ISystem是非托管系统

他必须要这三个抽象方法

  • OnCreate 在使用前初始化系统及其数据
  • OnUpdate 添加系统每帧必须执行的工作
  • OnDestroy 销毁前清理资源

因为ISystem不是通过基类继承的,所以每个抽象方法和回调里面都有一个 ref SystemState 参数,可用于访问 World、WorldUnsigned 或上下文数据和 API(如 EntityManager)。
而在Isystem里面调用多线程处理逻辑,方法就要比SystemBase要少的多了

  • IJobEntity:循环访问多个实体中的组件数据,您可以跨系统重用这些数据。
  • IJobChunk:按原型块循环访问数据。

只有这两种方法

ISystem和SystemBase一样提供了相同的接口和相同的时序

  • OnStartRunning 首次调用 之前的系统事件回调,以及系统停止或禁用后恢复时的系统事件回调。
  • OnStopRunning 当系统被禁用或与系统更新所需的任何组件不匹配时,系统事件回调。

正常使用

partial struct SPeedSystemBaker : ISystem
{
    public void OnCreate(ref SystemState state)
    {
        
    }

    public void OnUpdate(ref SystemState state)
    {
        var queryMissingTag = SystemAPI.QueryBuilder().WithAll<MoveComponent>().Build();
        state.EntityManager.AddComponent<ComponentAddTag>(queryMissingTag);
    }
    public void OnDestory(ref SystemState state)
    {
        
    }
}

ISystem与SystemBase的不同之处

ISystem 可以使用 Burst编译、非托管内存分配、原子性的Foreach访问、使用IJobEntity与IJobChunk。
而SystemBase可以使用GC、可存储管理托管对象、原子性Foreach、Entities.ForEach、Job.WithCode、使用IJobEntity与IJobChunk并且支持继承

ISystem的好处是可以使用Burst编译,并且允许在主线程上运行突发代码
而SystemBase的好处是使用更加方便,有GC并且支持继承

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity ECS(Entity Component System)是Unity引擎的一种编程范式,它是一种数据驱动的编程模型,它将游戏对象(Entity)分解为数据和行为两个部分,其中数据由组件(Component)来表示,行为则由系统(System)来实现。相对于传统的面向对象编程模型,ECS提供了更高效、更灵活的编程方式,可以有效地提高游戏的性能和扩展性。 下面是我学习Unity ECS时的笔记: ## Entity Entity是ECS中最基本的概念,它表示游戏对象。每个Entity由一个唯一的ID来标识,可以通过EntityManager来创建、销毁、查询和管理Entity。 ## Component Component是Entity的数据部分,用来描述Entity的属性和状态。每个Component包含一些数据成员和一些方法,用来操作这些数据成员。Component是以结构体(struct)的形式定义的,通常只包含数据成员,不包含方法。 ## System System是Entity的行为部分,用来实现游戏逻辑和操作Component。System可以访问和操作EntityManager和Component,但不能直接访问Entity。每个System包含一个或多个Component,表示它所处理的数据类型。System是以类(class)的形式定义的,通常包含一个Update方法,用来实现游戏逻辑。 ## Job Job是一种轻量级的线程,用于并行执行System中的任务。Job可以访问和操作Component,但不能直接访问Entity和EntityManager。Job通常是以结构体(struct)的形式定义的,不包含方法。 ## Archetype Archetype是Entity的集合,包含一组具有相同Component类型的Entity。Archetype可以用来优化数据的访问和处理,可以在不同的System之间共享。 ## Chunk Chunk是Archetype中的数据块,包含一组连续的Entity和它们的Component数据。Chunk可以用来优化内存的分配和访问,可以在Job中进行并行处理。 ## Buffer Buffer是一种Component类型,用来存储可变长度的数据,例如数组或列表。Buffer可以在System和Job中进行修改和访问。 以上是我学习Unity ECS时的笔记,希望对你有所帮助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值