【Dots之003】SystemAPI.Query相关基础笔记

这篇具有很好参考价值的文章主要介绍了【Dots之003】SystemAPI.Query相关基础笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、SystemAPI.Query

SystemAPI.Query只能作为foreach中in的的子句

SystemAPI.Query<RefRO<LocalTransform>>().WithAll<Obstacle>()

解析:对于每个具有LocalTransformObstacleEntity;都会将LocalTransform只读引用返回给查询结果

SystemAPI.Query<RefRW<LocalTransform>, RefRW<Velocity>>().WithAll<Ball>()

解析:查询具有LocalTransform,Velocity,Ball组件的Entity,将LocalTransform和Velocity的可读写引用返回,用于可读可修改

2、LocalTransform

不设置默认的Scale和Rotation属性

state.EntityManager.SetComponentData(player, new LocalTransform());

【Dots之003】SystemAPI.Query相关基础笔记,Dots,unity
可以看到默认都是设置为0;

设置的默认属性以后:

 state.EntityManager.SetComponentData(player, new LocalTransform
 {
       Position = new float3
       {
           x = obstacleTransform.ValueRO.Position.x + config.PlayerOffset,
           y = 1,
           z = obstacleTransform.ValueRO.Position.z + config.PlayerOffset
       },
       Scale = 1, // If we didn't set Scale and Rotation, they would default to zero (which is bad!)
       Rotation = quaternion.identity
   });

给Entity添加LocalTransform需要设置默认的ScaleRotation;上面的代码中没有设置,得到的结果会如下:
【Dots之003】SystemAPI.Query相关基础笔记,Dots,unity
现在就是正常的状态了;

3、Unity.Mathematics.Random

首先根据情况决定是否需要设置一个随机种子;然后在进行调用;

var rand = new Random(123);
//随机一个值
float random_one = rand.NextFloat(0, 100);
//随机一个2为向量
float2 random_v2 = rand.NextFloat2(new float2(0, 0), new float2(100, 100));
//随机一个方向
random_v2 = rand.NextFloat2Direction();

4、EntityQuery

获取或者创建与查询描述匹配的EntiyQuery
如果System中没有匹配的EntityQuery,那么就Create一个;如果有就直接Get

//描述同时具有Obstacle和LocalTransform组件的EntityQuery
var obstacleQuery = SystemAPI.QueryBuilder().WithAll<LocalTransform, Obstacle>().Build();

5、IEnableableComponent

组件继承IEnableableComponent,可以起到开启和关闭组件的作用;而不需要把该组件从Entity上面移除;
1、启用组件:SetComponentEnabled(entity,true);
2、关闭组件:SetComponentEnabled(entity,false);

 public override void Bake(PlayerAuthoring authoring)
 {
       var entity = GetEntity(TransformUsageFlags.Dynamic);

       AddComponent<Player>(entity);  
       AddComponent<Carry>(entity);
       //设置是否启用ComponentData
       SetComponentEnabled<Carry>(entity, false);
       
 }
 
public struct Carry : IComponentData, IEnableableComponent{}

3、如果通过IJobEntity的方式来处理组件的启用与否,可以参考下面的这种方式:

 	[WithAll(typeof(Turret))]
    [WithOptions(EntityQueryOptions.IgnoreComponentEnabledState)]
    [BurstCompile]
    public partial struct SafeZoneJob : IJobEntity
    {
        public float SquaredRadius;

        // Because we want the global position of a child entity, we read LocalToWorld instead of LocalTransform.
        void Execute(in LocalToWorld transformMatrix, EnabledRefRW<Carry> shootingState)
        {
            //组件的启用状态
            shootingState.ValueRW = math.lengthsq(transformMatrix.Position) > SquaredRadius;
        }
    }

EnabledRefRW后面的类型必须要继承IEnableableComponent文章来源地址https://www.toymoban.com/news/detail-685742.html

到了这里,关于【Dots之003】SystemAPI.Query相关基础笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity DOTS1.0安装

    2023年6月10日更新: 2022.3 Entities1.0 manifest.json添加一句

    2024年02月15日
    浏览(36)
  • Unity DOTS从原理到应用

    什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性。它使用C# Job System,Burst Compiler和Entity Component System(ECS)来组合和处理数据,让游戏运行更高效率。DOTS使开发人员可以使用最新技术来开发游戏,并在追求

    2024年02月11日
    浏览(42)
  • Unity项目技术方案Dots架构方案简介

    DOTS全称是Data-Oriented Tech Stack,翻译过来就是多线程式数据导向型技术堆栈(DOTS),它由任务系统(Job System)、实体组件系统(ECS)、Burst Compiler编译器三部分组成。 ECS + JobSystem + BurstCompile = 高性能 + 多线程 +  编译层面优化 DOTS保证相同类型组件在内存中都是顺序排列,极大

    2023年04月09日
    浏览(45)
  • Unity DOTS Baking与Baker详解

    Unity DOTS Baking与Baker详解   最近DOTS终于发布了正式的版本, 我们来分享一下DOTS里面Baking 与Baker的关键概念,方便大家上手学习掌握Unity DOTS开发。   Unity DOTS开发模式,为了让大家在”创作”游戏的时候使用原来组件方式来编辑游戏场景与资源,同时Unity提供了一种Baking机制

    2024年04月17日
    浏览(37)
  • Unity DOTS物理引擎的核心分析与详解

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查询。Unity.Phy

    2024年01月16日
    浏览(41)
  • DOTS Unity.Physics物理引擎碰撞事件处理

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics 物理引擎的主要流程与P ipeline   Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来执行:   

    2024年01月18日
    浏览(49)
  • Unity DOTS中的baking(四)blob assets

    blob assets表示不可变的二进制数据,在运行时也不会发生更改。由于blob assets是只读的,这意味着可以安全地并行访问它们。此外,blob assets仅限于使用非托管类型,这意味着它们与Burst编译器兼容。而且由于它们是非托管类型,序列化和反序列化的速度要比其他数据格式快得

    2024年04月13日
    浏览(34)
  • DOTS Unity.Physics物理引擎碰撞查询核心分析

      最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞查询以及核心相关概念。 Unity.Physics碰撞查询概述   碰撞查询(Collison Qurey)是Unity.Physics物理引擎中的一个很重要的功能。很多游戏逻辑都需

    2024年04月25日
    浏览(47)
  • Unity DOTS Baking System与Baking World

      最近DOTS终于发布了正式的版本, 我们来分享一下DOTS里面Baking阶段,Baking System,Baking World的关键概念,方便大家上手学习掌握Unity DOTS开发。Unity在Baking也是基于ECS模式开发设计的,所以Baking的时候也会有Baking System与Baking World,把Baking出来的数据放到Baking World里面。 Baking 的

    2024年04月09日
    浏览(38)
  • DOTS Unity.Physics物理引擎的核心分析与详解

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics 的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现,  包含了物理刚体的迭代计算与碰撞检测等查询。Unity.

    2024年03月18日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包