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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值