【UnityDOTS 四】System的理解

news2024/11/28 6:43:41

System的理解

前言

System主要用于在ECS中进行逻辑处理。它具有自己的声明周期,主要分为两类:ISystem,SystemBase。前一个是非托管内存访问,后一个是托管内存访问。

一、Systemg认知

System在主线程运行,可以在代码中使用Job系统来分发任务到其他子线程中。具有类似monoBehavour的生命周期函数:OnCreate,OnDestroy,OnUpdate等,根据名字不难判定他的调度时机。这些函数会传入一个ref SystemState参数,基本上提供了访问整个Entity环境内各种系统的方法。
在这里插入图片描述
一个World中只有一个对应的System实例,从原理上来说System可以访问任意Entity,但是建议还是System访问自己所在的World中的数据。

二、ISystem,SystemBase功能区分

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

三、SystemGroup

1.SystemGroup

用于对System进行管理,控制各个System的生命周期时机。
在这里插入图片描述
Unity默认创建的三种Group:Initialization,Simulation,Presentation。分别对应更新Unity引擎中PlayLoop中的更新时机(初始,循环,PreLate)。
SystemGroup中可以放入任意其他SystemGroup以及对应的System。其中Unity本身也预定义了很多自己的SystemGroup以及System。

我们可以自定义自己的SystemGroup,并将对应的System放入到我们自己定义的SystemGroup中。目前我们自定义的SystemGroup一般都会被Unity放入到Simulation System Group中去。
通过继承ComponentSystemGroup就可以自定义一个自己的Group。

2.控制System中的更新顺序

在这里插入图片描述
UpateInGroup:可以指定你的System加入到对应的Group中
UpdateBefore/UpdateAfter:可以指定System在相同的Group中的前后更新顺序
CreateBefore/CreateAfter:可以直接指定与其他System的前后创建与销毁的顺序,即OnCrate,OnDestroy的调用顺序。备注:Destroy与Create顺序相反。
DisableAutoCreation:禁止World自动给你创建这个System。默认状态下编写了一个System,world会自动实例化这个System,并进行运行。开启这个后,可以手动添加System,手动调用.Updateq去更新,对有特殊更新逻辑的System可以用这种方式。


总结

SystemGroup可以用来管理组内的System,也可以使用Enable来控制整个Group是否启用。
备注:需要控制SystemGroup的空跑Update,原理与MonoBehavoiur类似。

在System中尽可能不要定义Public数据对外提供数据功能,破坏了线程调度的安全性(虽然System在主线程中运行,但是对外提供比如对Job提供了访问数据的功能,就会造成线程不安全)。

最好是使用EntityQuery以及GetComponentTypeHandle的方式来访问Chunk中的Component数据,不要通过EntityManager来访问,比较低效。(有些功能,比如创建Entity之类的,这种就应该使用EntityManager来进行)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于php电影动漫在线观看系统 (源码➕数据库)

本系统主要是为用户提供一个动漫视频观看的平台,系统分为两个角色,一个是用户角色,另一个是管理员角色,其中用户角色可查看动漫视频的分类,查看动漫视频的详情,点击播放动漫视频,对动漫视频进行…

如何使用 OpenCV 去除图像背景

文末附源代码的免费下载链接 在本教程中,我们将学习如何使用 OpenCV 使用一种名为背景减法的技术来去除视频中的背景。 背景扣除是计算机视觉中用于检测视频中移动物体的常用技术。对于安全、监视、交通监控等来说,这是一种非常有用的技术。 背景减法的基本思想是通过从前景…

VirtualBox安装Ubuntu(22.04.2)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【Hello mysql】 数据库基础

Mysql专栏:Mysql 本篇博客简介:简单的介绍mysql相关的一些基础知识和在Linux环境下的安装 让大家对于mysql有一个初步的认知 数据库基础 数据库基础数据库定义数据库再理解软件角度文件角度总结 主流数据库mysql安装卸载不要的环境获取mysql官方yum源安装…

MySQL数据库引擎及账号管理

目录 前言 二、MySQL数据库引擎 1.是什么 2.MySQL的核心 3.MySQL的存储引擎 a.InnoDB(MySQL默认引擎) b.ACID事务 c.四种隔离级别 d.MyISAM e.MEMORY(Heap) 4.存储引擎查看 三、命令行操作数据库 四、账号管理 前言 MySQL安装请看MySQL的安装…

输入框input事件compositionstart和compositionend的妙用

现象&#xff1a; 在将输入输入法切换到中文的时候&#xff0c;在打拼音的过程中也会触发oninput事件&#xff0c;如下&#xff1a; const Demo()>{const [value,setValue]useState("");return (<><input onInput{(e)>{console.log("value&…

【多种优化算法比较】混沌引力搜索算法(CGSA)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

byte字节值与ASCII表中char之间的转换

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

三款小游戏功能:让孩子在运动中享受智力挑战

最近看到一款很有趣的小玩具&#xff0c;是一种专门为儿童设计的益智训练器&#xff0c;功能很丰富&#xff0c;可以为孩子带来不少乐趣&#xff0c;起到一些体能和智力训练的作用。这款叫做益智感统摸高训练器的小工具&#xff0c;主要功能就是帮助儿童进行摸高训练&#xff0…

C/C++内存管理详解

去年的今日&#xff0c;博主第一次发文&#xff0c;那时初出茅庐&#xff0c;没什么经验。时隔一年&#xff0c;更加优质的博文献上&#xff0c;希望可以帮助到更多的人❤️❤️❤️ 文章目录 &#x1f4ac; 前言一、C/C内存分布二、C语言中动态内存管理方式三、C内存管理方式1…

AlexNet实战

前言&#xff1a;之前学了挺多卷积神经网络模型&#xff0c;但是都只停留在概念。代码都没自己敲过&#xff0c;肯定不行&#xff0c;而且这代码也很难很多都看不懂。所以想着先从最先较简单的AlexNet开始敲。不过还是好多没搞明白&#xff0c;之后逐一搞清楚。 文章目录 Alex…

Spark弹性分布式数据集

1. Spark RDD是什么 RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是一个不可变的分布式对象集合&#xff0c;是Spark中最基本的数据抽象。在代码中RDD是一个抽象类&#xff0c;代表一个弹性的、不可变、可分区、里面的元素可并行计…

BottomNavigationView(自带角标)无法添加角标的解决问题

android studio的报错提示&#xff1a;java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). 解决&#xff0c;改主题&#xff1a;

跨境平台做测评、采退、Lu卡、lu货要怎么做安全?

大家好&#xff0c;我是珑哥测评&#xff0c;今天和大家聊聊比较小众的圈子&#xff0c;也就是测评衍生出来的分支&#xff0c;采购和退款。因为最近也有很多客户咨询这个问题&#xff0c;由于沃尔玛风控升级了&#xff0c;很多客户下不成功的问题。 大家都知道无论是做测评还是…

BPM流程引擎适用于哪些类型企业管理系统

看到标题的童鞋们&#xff0c;估计在搜索办公软件系统时都会留意到BPM&#xff0c;那BPM到底是何方神圣&#xff1f;它与管理系统有什么区别呢&#xff1f;今天我们一一解答。 什么是BPM&#xff1f; BPM&#xff08;即业务流程管理&#xff09;&#xff0c;是企业信息化发展的…

[网络] ifconfig down掉的网口,插上网线网口灯依然亮?

1、软硬件环境 环境1&#xff1a; 硬件&#xff1a; 飞腾E2000Q ARM64 平台 YT8521SH (phy) 软件&#xff1a; linux 4.19.246 环境2&#xff1a; 硬件&#xff1a; NXP T1042 PowerPC 平台 YT8521SH (phy) 软件&#xff1a; linux 4.1.35 备注&#xff1a; 1、环境1的网…

Rdkit|分子可视化

Rdkit|分子可视化 Github&#xff1a; 地址 单个展示 从mol对象到图片&#xff1a;MolToImage(mol, size, kekulize, wedgeBonds, fitImage, …) mol&#xff1a;mol对象 size&#xff1a;图片尺寸&#xff0c;默认(300, 300) kekulize&#xff1a;是否展示kekule形式&#…

Apikit 自学日记:新建 API 请求

进入流程测试用例详情页&#xff0c;点击添加测试步骤&#xff0c;在下拉菜单中选择 添加API请求 &#xff0c;系统会自动进入API测试步骤编辑页面&#xff0c;接下来你可以编辑API的请求参数、返回结果、校验规则等内容。 设置 API 测试步骤 API测试步骤设置分为以下几个部分…

react笔记_07类组件

目录 复习展开运算符 组件什么叫做组件&#xff1f;分类类组件es6新增构造函数语法类组件渲染类组件的this指向类组件的三大属性state作用语法-初始化数据语法-修改state数据语法-获取state中的数据案例 propspropTypes属性(prop-types库)defaultProps属性 refs[1] 字符串形式的…

搞定HashMap

搞定HashMap 1.Map是个啥&#xff1f; HashMap隶属于Java中集合这一块&#xff0c;我们知道集合这块有list&#xff0c;set和map&#xff0c;这里的HashMap就是Map的实现类&#xff0c;那么在Map这个大家族中还有哪些重要角色呢&#xff1f; 上图展示了Map的家族&#xff0c;…