首页 > 其他分享 >Unity DOTS技术(十一) SystemBase详解

Unity DOTS技术(十一) SystemBase详解

时间:2024-06-07 09:04:06浏览次数:16  
标签:DOTS 包含 Burst SystemBase Unity 线程 组件 筛选

文章目录


一.什么是SystemBase

在之前的分享中我们用到的系统父类有ComponentSystem主要操控主线程的,JobCoponentSystem主要操作多线程的.
而SystemBase则可以兼容以上两者,操控主线程及多线程.
在这里插入图片描述

二.SystemBase的生命周期

从以下代码可以看出生命周期为
OnCreate > OnStartRuning > OnUpdate > OnStopRunning > OnDestroy
在这里插入图片描述在这里插入图片描述

三.继承实现

继承SystemBase必须实现OnUpdate接口
在这里插入图片描述

否则将会有如下报错

在这里插入图片描述

四.操控的依据

使用SystemBase时,系统基类中包含了World和EntityManager组件,对此可以对组件进行操控.

1.使用World,EntityManager进行操控,在SystemBase的基类中有包含World 和 EntityManager
在这里插入图片描述

2.用System自带方法
在这里插入图片描述

3.通过System成员变量方位Entities
在这里插入图片描述

当系统中使用ref和in时,需要将ref放在前面

五.组件筛选的限制

在使用Foreach时会可以使用WithAll WithAny WithNoe对筛选的结果进行操作

1.如图WithAll即可筛选出同时包含PrintComponentData1 和 RotationEulerXYZ 的实体.
在这里插入图片描述

2.WithAny 包含 组件中的其中一个则会被筛选出来
在这里插入图片描述

3.WithNone 会筛选出不包含组件的实体

在这里插入图片描述

六.组件监听

监听组件值修改时触发
在这里插入图片描述

我们分发现报错
在这里插入图片描述

当使用监听时我们需要在此对类型进行声明
在这里插入图片描述

七.共享组件筛选

筛选共享组件,需要注意的是如下图,只会筛选出值为5的共享组件

在这里插入图片描述

八.存储筛选结果

将筛选出的结果存到EntityQuery中,下面我们还装EntityQuery转换NativeArray并循环打印
在这里插入图片描述

九.过滤标识组件

WithEntityQueryOptions可以过滤组件

1.过滤包含WriteGroup标识的组件
在这里插入图片描述

以下是WriteGroup的用法
在这里插入图片描述

2.过滤包含Disable的组件
在这里插入图片描述

3.过滤包含Prefab的组件
在这里插入图片描述

十.线程操作

1.Run()代表程序只在主线程上单线程运行
在这里插入图片描述

2.Schedule开多一个线程运行
在这里插入图片描述

3.开启多线程操作
在这里插入图片描述

十一.线程名称修改

使用WithName修改线程名称

在这里插入图片描述

十二.Burst编译器开关

4.使用编译器WithBurst 或 WithoutBurst关闭Burst编译器
在这里插入图片描述
在这里插入图片描述

注意的是需要在菜单栏中Jobs > Burst > Enable Compilation 勾选开启Burst
在这里插入图片描述

标签:DOTS,包含,Burst,SystemBase,Unity,线程,组件,筛选
From: https://blog.csdn.net/ww1351646544/article/details/139439919

相关文章

  • Unity UGUI 之 Text 控件
    介绍UGUI中的Text控件是UnityUGUI中的一个常用控件,用于显示文本内容。常用属性属性描述Text文本内容Font字体FontstyleNormal标准字体字体风格Bold加粗字体Italic斜体BoldandItalic加粗斜体FontSize文字大小LineSpacing行距RichText富文本支持以下为常用标签<b......
  • 使用 Unity Sentis 实现AI换脸
    前言使用UnitySentis和ComputeShader,det_10g.onnx进行高效人脸五官定位-CSDN博客需要用到该篇文章中的五个关键点信息进行人脸对齐。模型分析实现ai换脸的核心模型是inswapper_128.onnx;它的输入值有两个target和source,target是目标面部图片尺寸为(128*128*3),source是......
  • Unity Memory Profiler 内存分析
    参考:UnityMemoryProfiler从入门到精通-CSDN博客 UnityMemoryProfiler是一个用于分析和调试Unity游戏或应用程序内存使用情况的工具。它帮助开发者了解应用程序的内存分配和使用情况,从而识别和解决潜在的内存问题,如内存泄漏、过度的内存分配和不必要的内存消耗。Unity......
  • Unity VR 零基础开发之 Pico4 MR
    一、新建Unity2021.3.37 3D工程二、切换到Android安卓平台1、点击Unity编辑器左上角的Flie后,选择BuildSetting选项。2、弹出弹窗后,点击Android选项,然后再点击SwitchPlatform按钮切换成安卓平台。3、切换完成后Android选项后面会显示unity图标。三、官网下载PicoSDK......
  • 【Unity】Texture下载、保存、加载
    代码块网络下载图片//2017之后推荐使用UnityWebRequestIEnumeratorDownloadTexture(stringurl){WWWwww=newWWW(url);yieldreturnwww;if(www.isDone){texture=www.texture;}}保存图片到本地voidSaveTexture(){stringsave......
  • Unity通过shader实现图像转像素画
    新建一个无光照shader(我选择了Create->Shader->UnlitShader),命名为:PixelateShader,双击打开它,粘贴以下内容Shader"Custom/PixelateShader"{Properties{_MainTex("Texture",2D)="white"{}_PixelSize("PixelSize......
  • Unity中的物体移动
    在Unity中,Rotate和Translate是Transform组件的两个方法,它们用于改变游戏对象的空间位置和方向。Rotate方法Rotate方法用于围绕游戏对象的局部坐标系中的轴或围绕世界坐标系中的轴旋转游戏对象。这个方法有多个重载版本,允许你以不同的方式指定旋转。局部旋转transform.R......
  • 【Unity】Vector3的方法
    属性和方法作用normalized使用Vector3.normalized的一个常见场景是在物理模拟中,比如计算速度向量或在射线投射(Raycasting)中确定射线的方向。LerpVector3.Lerp在Unity中非常常用,尤其是在动画和游戏逻辑中,用于平滑地过渡从一个状态到另一个状态,例如角色移动、颜色渐变......
  • 【Unity美术】spine软件的使用—2D动画的制作
    ......
  • 【实用技巧】Unity中的Image组件
    Unity中的Image组件是UI系统的核心部分,用于显示图像和纹理。以下是一些关于UnityImage组件的实用技巧:使用Sprite作为Image源:将Sprite直接拖拽到Image组件的SourceImage字段中,可以快速设置显示的图像。调整颜色和透明度:通过修改Image组件的Color属性,可以改变显示图像的颜......