【Dots之009】WriteGroup

news2024/11/15 16:00:55

一、WriteGroup基础知识

WriteGroup是一个属性标签,在ECS的代码中可以用于修饰组件;

格式如下

[WriteGroup(typeof(T))]

那么接下来看几段代码进行理解;

1、定义几个组件

struct ScaleComponentData : IComponentData
{
    public Entity prefab;
    public float3 scale;
    public float3 pos;
} 
/// <summary>
/// 放大Tag
/// </summary>
[WriteGroup(typeof(ScaleComponentData))]
struct BigScaleTag : IComponentData   { }

/// <summary>
/// 缩小Tag
/// </summary>
[WriteGroup(typeof(ScaleComponentData))]
struct SmallScaleTag : IComponentData  {  }
}

1.1 拆分理解

[WriteGroup(typeof(ScaleComponentData))]
struct BigScaleTag : IComponentData   { }

可以理解为把BigScaleTag放入一个集合中,这个集合有一个标识属性,这个标识类型是:ScaleComponentData

[WriteGroup(typeof(ScaleComponentData))]
struct SmallScaleTag : IComponentData  {  }

同理这里也是把组件SmallScaleTag放入一个集合中,该集合有一个标识属性,该属性的类型是:ScaleComponentData

上面的代码这样修饰后有什么作用?
可以根据不同的查询条件来对组件ScaleComponentData数据进行修改

2、查询解析

2.1、 如果一个Entity只有ScaleComponentData组件,那么下面的查询结果是什么?

foreach (var scaleComponent in SystemAPI.Query<RefRW<ScaleComponentData>>())

在这里插入图片描述
上面的代码能够查询到ScaleComponentData类型数据;和普通的查询没有任何区别;

2.2、在2.1的基础上,再给Entity加一个SmallScaleTag或者BigScaleTag组件,下面的查询结果是什么

foreach (var scaleComponent in SystemAPI.Query<RefRW<ScaleComponentData>>())

在这里插入图片描述
上面的代码还是可以查询到结果的;和2.1一样;

但是加入了WriteGroup还是上面的结果就没啥意义了;
加入WriteGroup是为了在不同System之间,根据不同的条件对Entity的ScaleComponentData数据进行修改;该修改的数据作为其它系统的数据输入源;
所以,这个时候的代码应该是要修改为如下代码:

foreach (var scaleComponent in SystemAPI.Query<RefRW<ScaleComponentData>>().WithOptions(EntityQueryOptions.FilterWriteGroup))

意思是我想要查询ScaleComponentData组件,但前提是该Entity上没有和ScaleComponentData组件相关的WriteGroup属性;
更直白的说,如果entity上面同时具有ScaleComponentData和BigScaleTag组件

看如下截图:
在这里插入图片描述
那么下面这段代码:

foreach (var scaleComponent in SystemAPI.Query<RefRW<ScaleComponentData>>().WithOptions(EntityQueryOptions.FilterWriteGroup))

是无法查询到结果的

因为它开启了过滤WriteGroup标签;也就是只要在Entiy上有目标类型ScaleComponentData的WriteGroup属性组件;它就查询不到结果。
如果不过滤这个属性,也就是2.1的代码,那它还是可以正常查询到结果的;

二、基本总结

WriteGroup属性标签比较困惑的地方是加上后的查询问题和在什么地方用;
就像上面说的,在不同的系统之间,需要根据不同的条件对一个组件数据进行修改,修改后的数据作为其它系统的数据源;这个时候是比较有用的;
因为各自ISystem之间的代码独立,相互不会影响,且达到解耦效果;

其中具有WriteGroup属性标签的查询,要根据自己添加的组件来进行查询;并且要注意原始数据,也就是原始数据是否要过滤属性标签,这里要做合适的处理,要不然得不偿失;

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

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

相关文章

日流量200亿,携程网关的架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 就在昨天&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发 Netty网关项目》&#xff0c;此项目帮这个小伙拿到 字…

电脑c盘变红满了怎么清理?4个方法轻松清理!

“我的电脑才用了不到一年&#xff0c;现在就已经满了&#xff01;电脑c盘变红满了应该怎么清理呢&#xff1f;有什么方法能帮我清理的干净一点吗&#xff1f;希望大家给我出出主意。” 随着我们使用电脑时间的增多&#xff0c;电脑C盘可能会变得满满当当&#xff0c;这会不仅会…

失效的访问控制及漏洞复现

失效的访问控制(越权) 1. 失效的访问控制(越权) 1.1 OWASP TOP10 1.1.1 A5:2017-Broken Access Control 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据&#xff0c;例如&#xff1a;访问其他用户的帐户、查看敏感文件、修改其…

高速信号应如何走线?这些规则千万别走错

提起高速信号的设计与布线&#xff0c;可能很多工程师都能头头是道&#xff0c;但放在实际设计中却大部分不可行&#xff0c;这篇文章将向电子工程师介绍一些关键规则&#xff0c;确保在电路板上传输高速信号时获得最佳性能&#xff0c;注意这些规则千万别走错&#xff01; 1、…

Java后端开发面试题——JVM虚拟机篇

目录 什么是程序计数器&#xff1f; 你能给我详细的介绍Java堆吗? 什么是虚拟机栈 1. 垃圾回收是否涉及栈内存&#xff1f; 2. 栈内存分配越大越好吗&#xff1f; 3. 方法内的局部变量是否线程安全&#xff1f; 4.什么情况下会导致栈内存溢出&#xff1f; 5.堆栈的区别…

Weblogic SSRF【漏洞复现】

文章目录 漏洞测试注入HTTP头&#xff0c;利用Redis反弹shell redis不能启动问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi…

Unity设置TextMeshPro文本超出范围显示...

TextMtshPro文本超出范围&#xff0c;展示省略。选择Overflow为Ellipsis。

链表的中间节点(每日一题)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 ☕今日份刷题&#xff1a;移除链表元素 题目描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例1: 输入&#…

AI数据标注迈入自动化时代,26年老兵掘金全球智能汽车市场

4D数据标注&#xff0c;掀起了业界新风向。 一是以BEV为代表的感知技术&#xff0c;输出的空间从2D透视图像转换到了3D空间&#xff0b;时序维度&#xff0c;4D标注应运而生&#xff1b;二是4D标注借助点云级别或object级别的重建&#xff0c;通过人工标注积累原始数据&#x…

Calico BGP通信分析

Calico BGP通信分析 BGP网络模型 BGP网络相比较IPIP网络&#xff0c;最大的不同之处就是没有隧道设备tunl0&#xff0c;pod之间的流量直接从宿主机通过arp下一跳到目的地宿主机&#xff0c;减少了tunl0环节 BGP两种模式&#xff1a; 全互联模式(node-to-node mesh)——全互联…

批量采集的时间管理与优化

在进行大规模数据采集时&#xff0c;如何合理安排和管理爬取任务的时间成为了每个专业程序员需要面对的挑战。本文将分享一些关于批量采集中时间管理和优化方面的实用技巧&#xff0c;帮助你提升爬虫工作效率。 1. 制定明确目标并设置合适频率 首先要明确自己所需获取数据的范…

陇剑杯2023WriteUp学习笔记【初赛】

文章目录 数据分析1、hard_webhard_web_1hard_web_2hard_web_3 2、sevrer savesevrer save_1sevrer save_2sevrer save_3sevrer save_4sevrer save_5sevrer save_6sevrer save_7sevrer save_8 3、WiresharkWireshark1_1Wireshark1_2Wireshark1_3Wireshark1_4 4、Incidentrespon…

C++信息学奥赛1187:统计字符数

#include <bits/stdc.h> using namespace std; int main() {string arr;cin >> arr; // 输入一个字符串int n, a, max; // 定义变量n, a, maxchar ArrMax; // 定义字符变量ArrMaxn arr.length(); // 获取字符串长度max a 0; // 初始化max和a为0// 外层循环&…

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程

详情点击链接&#xff1a;GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程 前沿 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Py…

Java多线程篇(1)——深入分析synchronized

文章目录 synchronized原理概述锁升级 初始状态偏向锁偏向锁获取/重入偏向锁的撤销/重偏向和升级批量重偏向和批量偏向撤销偏向锁的释放 轻量级锁轻量级锁获取/重入轻量级锁膨胀轻量级锁释放 重量级锁重量级锁获取/重入重量级锁释放重量级锁的降级 其他锁粗化、锁消除调用hashc…

Elasticsearch 中的向量搜索:设计背后的基本原理

作者&#xff1a;ADRIEN GRAND 实现向量数据库有不同的方法&#xff0c;它们有不同的权衡。 在本博客中&#xff0c;你将详细了解如何将向量搜索集成到 Elastisearch 中以及我们所做的权衡。 你有兴趣了解 Elasticsearch 用于向量搜索的特性以及设计是什么样子吗&#xff1f; …

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)

文章目录 例说mapserver静态地图参数1. Rviz中显示的地图2. mapserver保存地图详解3. 补充实验 例说mapserver静态地图参数 1. Rviz中显示的地图 在建图过程中&#xff0c;rviz会显示建图的实时情况&#xff0c;其输出来自于SLAM&#xff0c;浅蓝色区域为地图大小&#xff0c…

SAP GUI登陆界面图片更换

导语&#xff1a;SAP登陆界面的图片不太好看&#xff0c;换一个客户需要的图片上去。 一、上传至SMW0 将准备好的图片&#xff0c;通过事物码SMW0进行上传。 二、更改配置表 事物码SM30&#xff0c;更改配置表【SSM_CUST】&#xff0c;以调用上传的图片 三、效果展示 作者…

Redis6搭建高可用的多主多从集群

Redis6搭建高可用的多主多从集群 环境准备搭建redis6集群安装redis6修改配置文件修改cluster-enabled修改cluster-config-file修改cluster-node-timeout 启动集群 环境准备 首先我们需要6台redis&#xff0c;那么为啥是6太呢&#xff1f;是因为我们要部署多master和多slaver集…

SpringCloudAlibaba之Sentinel介绍

文章目录 1 Sentinel1.1 Sentinel简介1.2 核心概念1.2.1 资源1.2.2 规则 1.3 入门Demo1.3.1 引入依赖1.3.2 集成Spring1.3.3 Spring中资源规则 1.4 Sentinel控制台1.5 核心原理1.5.1 NodeSelectorSlot1.5.2 ClusterBuilderSlot1.5.3 LogSlot1.5.4 StatisticSlot1.5.5 Authority…