Unity DOTS1.0 入门(3) System与SystemGroup 概述

System与SystemGroup 概述

System

  1. System是提供一种代码逻辑,改变组件的数据状态,从一个状态到另外一个状态
  2. System在main thread里面运行, system.Update方法每一帧执行一次(其他线程中运行的就是JobSystem的事情了)
  3. System是通过一个System Group这个体系来决定它调用的顺序
  4. 可以定义托管或者非托管的System
    1.定义托管方式:用Class继承SystemBase
    2.定义非托管方式:用Struct继承ISystem
  5. 两种方式都可以重写3个方法:
    OnUpdate, OnCreate, OnDestroy
  6. 一个System只能处理本身所处世界的Entity,并且可以通过World属性获得所处的世界
  7. 默认情况下,启动的时候会为每个system与SystemGroup 创建一个实例出来;并且会创建3个默认SystemGroup:
    • lnitializationSystemGroup:
    • SimulationSystemGroup:
    • PresentationSystemGroup:
      默认情况下,用户创建出来的System实例,会放到SimulationSystemGroup这个分组下。 你也能够使用[UpdatelnGroup]来制定某个System放到哪个分组
  8. 可以使用的System类型有:
    • SystemBase: 为被托管system提供基类.(class 使用)
    • ISystem: 为非托管system提供可继承接口(struct 使用).
    • EntityCommandBufferSystem: 为其他system提供实体命令缓冲区实例(entity command buffer instances). 这允许你将结构性变化分组在一起,以提高应用程序的性能.
    • ComponentSystemGroup: 为system提供嵌套的组织和update的顺序.

System Group

  1. 包含System或者子System Group
  2. 也有Update,可以被重写
  3. 可以定制它孩子的update调用顺序

System Window

  • 这个窗口可以查看每个World中Systems update的调用顺序
    在这里插入图片描述
  • 图标类型说明如下:
    在这里插入图片描述
  • 第一个表示:system group
  • 第二个表示:system
  • 第三个表示:会在SystemGroup最开始时执行的一个entity command buffer system
  • 第四个表示:在一个system group里最后执行的entity command buffer system

System示例代码

创建GameSystem.cs脚本

//必须添加partial关键字 不然会报错,这是因为Unity在编译时会自动生成这个类的其他代码
public partial class GameSystem : SystemBase
{protected override void OnUpdate(){}protected override void OnCreate(){base.OnCreate();}protected override void OnDestroy(){base.OnDestroy();}
}

运行后在Simulation System Group 下就能看到,这是Unity通过SystemBase类的注解(attribute)创建出来的
在这里插入图片描述

update中代码示例:查询场景中所有的ComponentData组件的rotSpeed和LocalTransform

protected override void OnUpdate(){//查询ComponentData 的LocalTransform//遍历系统中所有的ComponentData 和 LocalTransform//SystemAPI.Query 会在编译时生成EntityQuery代码,并且缓存查询的类型,然后用计数器迭代缓存的Query数据并替换掉 SystemAPI.Query<T> foreach (var (r, t) in SystemAPI.Query<RefRW<ComponentData>, RefRO<LocalTransform>>()){//RefRW<ComponentData> r 代表可读写的ComponentData//RefRO<LocalTransform> t 代表只读的LocalTransform//ValueRW 和 ValueRO 是对应的引用. RW 代表可读写,RO 代表只读float rotSpeed = r.ValueRO.rotSpeed;Vector3 position = t.ValueRO.Position;}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶-合

目录 1.使用环境 2.条件判断 2.1.case when 2.2.if 3.窗口函数 3.1.排序函数 3.2.聚合函数 3.3.partiton by ​​​​​​​3.4.order by 4.排序窗口函数 5.聚合窗口函数 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 MySQL进阶…

DonkeyDocker-v1-0渗透思路

MY_BLOG https://xyaxxya.github.io/2024/04/13/DonkeyDocker-v1-0%E6%B8%97%E9%80%8F%E6%80%9D%E8%B7%AF/ date: 2024-04-13 19:15:10 tags: 内网渗透Dockerfile categories: 内网渗透vulnhub 靶机下载地址 https://www.vulnhub.com/entry/donkeydocker-1,189/ 靶机IP&a…

【opencv】示例-npr_demo.cpp 非真实感渲染:边缘保留平滑、细节增强、铅笔素描/彩色铅笔绘图和风格化处理...

Edge Preserve Smoothing- Using Normalized convolution Filter Edge Preserve Smoothing-Using Recursive Filter Detail Enhancement Pencil sketch/Color Pencil Drawing Stylization /* * npr_demo.cpp * * 作者: * Siddharth Kherada <siddharthkherada27[at]gmail[do…

Linux-线程

进程 与 线程: 参考自&#xff1a; Linux多线程编程初探 - 峰子_仰望阳光 - 博客园 (cnblogs.com) 进程:   典型的UNIX/Linux进程可以看成只有一个控制线程&#xff1a;一个进程在同一时刻只做一件事情。 有了多个控制线程后&#xff0c;在程序设计时可以把进程设计成在同一时…

【vue】slot 匿名插槽 / 具名插槽

slot父组件向子组件传递数据 匿名插槽–直接写 具名插槽–指定名称 父组件中 子组件中&#xff1a; 代码 App.vue <template><h2>App.vue</h2><!-- 匿名插槽 --><Header><a href"1234567890.com">1234567890</a>&…

EasyUI Jquery 学习笔记 ——DataGrid(数据网格)与 Tree(树)详细版

1. DataGrid(数据网格)与 Tree(树) 1.1 Datagrid 数据网格 扩展自 $.fn.panel.defaults。通过 $.fn.datagrid.defaults 重写默认的 defaults。 数据网格(datagrid)以表格格式显示数据,并为选择、排序、分组和编辑数据提供了丰富的支持。数据网格(datagrid)的设计目…

openGauss 之min/max 优化代码走读

一. 前言 在openGuass中&#xff0c;如果对索引列执行max/min操作,openGauss会优化成只读取索引的最前/后的一行数据&#xff0c;避免了对整表数据进行读取和聚合操作&#xff0c;如下所示&#xff1a; 二. min/max优化代码走读 1. 首先需要将min/max 算子转成成执行计划中降序…

迈威通信MaxGate800系列工业边缘计算网关,算力硬核中枢的巅峰之作

随着人们对工业物联网领域的深入了解与实践&#xff0c;越来越多的企业开始寻求将计算业务从云端迁移至网络边缘处理与执行。然而&#xff0c;在实际应用中&#xff0c;开发者面临着诸多挑战。为了解决这些问题&#xff0c;迈威通信MaxGate800系列工业智能网关应运而生。 MaxG…

《自动机理论、语言和计算导论》阅读笔记:p139-p171

《自动机理论、语言和计算导论》学习第 7 天&#xff0c;p139-p171总结&#xff0c;总计 33 页。 一、技术总结 1.reversal p139, The reversal of a string a1a2…an is the string written backwards, that is anan-1…a1. 2.homomorphism A string homomorphism is a f…

错题记录-华为海思

华为 海思数字芯片 参考 &#xff1a;FPGA开发/数字IC笔试系列(5) 华为海思IC笔试解析 FPGA开发/数字IC笔试系列(6) 华为海思IC笔试解析 SystemVerilog Function与Task的区别 $readmemh与$readmemb这两个系统任务是用来从指定文件中读取数据到寄存器数组或者RAM、ROM中。除了…

[CSS]使用方式+样式属性

层叠样式表&#xff08;Cascading Style Sheets&#xff09;&#xff0c;与HTML一样&#xff0c;也是一种标记语言&#xff0c;其作用就是给HTML页面标签添加各种样式&#xff0c;定义网页的显示效果&#xff0c;将网页内容和显示样式进行分离&#xff0c;提高了显示功能。简单…

大话设计模式——24.迭代器模式(Iterator Pattern)

简介 提供一种方法顺序访问一个聚合对象中各个元素&#xff0c;而又不暴露该对象的内部实现。&#xff08;Java中使用最多的设计模式之一&#xff09; UML图 应用场景 Java的集合对象&#xff1a;Collection、List、Map、Set等都有迭代器Java ArrayList的迭代器源码 示例 简…