博毅创为Alan老师

导航

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念,方便大家上手学习掌握Unity DOTS开发。

System是迭代计算与处理World中的Entity实体的Component Data数据的逻辑代码。System对应的代码是运行在main thread上的。World里面所有的System通过SystemGroup来进行管理, 通过SystemGroup, 来决定了每个System的迭代顺序。

System分为托管对象与非托管对象两种模式, 定义托管对象System的时候,定义一个class, 继承自SystemBase, 定义非托管对象的时候,定义struct 继承自ISystem。

System有三个常用的接口,可以供用户重写,接口包含如下:

每个System只能迭代它所在的World中的Entity, 每个System在创建的时候会有一个数据成员World指向它所在的World,我们可以通过system实例.World来获取。

Unity运行的时候,默认会创建一个World, 并创建默认的SystemGroup,它们分别是:

同时会扫描当前所有的System类,为每个System类创建一个实例放到SystemGroup中,运行后该System就会被迭代计算到。默认创建的System,如果你没有指定分组,默认会创建到SimulationSystemGroup分组中,如果System需要创建到特定的分组,可以通过属性装饰器[UpdateInGroup]。

如果不想要系统默认创建,可以定义宏关闭掉:

UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP

System有以下的一些类型,可以供开发者使用,类型如下:

SystemBase: 基于托管类的System;

ISystem: 基于非托管类的System;

EntityComponentBufferSystem: 为其它的System提供entity 命令缓冲区;

ComponentSystemGroup: 嵌套System的层级关系与Update的顺序;

每个SystemGroup可以包含System与子SystemGroup,可以通过重写SystemGroup的update来决定System的迭代顺序。可以通过System Window来查看当前系统的所有System与层级关系,如下图所示:

今天分分享到这里,关注我们,学习更多的最新Unity DOTS 进阶与实战相关的知识.

posted on 2023-12-01 10:01  游戏开发阿博  阅读(27)  评论(0编辑  收藏  举报