Unity ECS学习(9)

这篇具有很好参考价值的文章主要介绍了Unity ECS学习(9)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现在让我们回来看一下IJobEntity

IJobEntity使用

首先要先声明一个JobEntity
声明需要继承IJobEntity接口,需要是stuct结构体
最后需要实现 Execute方法

public partial struct  MoveChangeJobEntity : IJobEntity
{
    public void Execute(ref MoveComponent moveComponent)
    {
        if (moveComponent.Speed>10)
        {
            moveComponent.Speed = -moveComponent.Speed;
        }
        else
        {
            moveComponent.Speed += 0.1f;
        }
    }
}

然后是使用 直接new后调用 ScheduleParallel接口就可以了

    protected override void OnUpdate()
    {
        new MoveChangeJobEntity().ScheduleParallel();
    }

这里有一个问题 我们并没有调用 Execute,也就谈不上传参,这个参数是怎么来的???

IJobEntity查询

首先我们定义一个EntityQuery
然后给他赋值
赋值后再new JobEntity的时候把EntityQuery当作参数传入

    EntityQuery query_boidtarget;
     protected override void OnCreate()
    {
        query_boidtarget = GetEntityQuery(ComponentType.ReadWrite<MoveComponent>());
        // Query that contains all of Execute params found in `QueryJob` - as well as 
    }
        protected override void OnUpdate()
    {
        // Uses the BoidTarget query
        new MoveChangeJobEntity().ScheduleParallel(query_boidtarget);
    }

这样就相当于给JobEmtity传入了一个集合,让它再这个集合里面去走它的逻辑

他还有一个特殊的筛选方法
通过在结构上设置进行筛选

[WithAll(typeof(MoveComponent))]
[WithNone(typeof(Banana))]
public partial struct  MoveChangeJobEntity2 : IJobEntity
  • Unity.Entities.WithAll(params Type[]) 在作业结构上设置。缩小查询范围,以便实体必须与提供的所有类型匹配。
  • Unity.Entities.WithAny(params Type[]) 在作业结构上设置。缩小查询范围,以便实体必须匹配提供的任何类型。
  • Unity.Entities.WithNone(params Type[]) 在作业结构上设置。缩小查询范围,以便实体必须与提供的任何类型都不匹配。
  • Unity.Entities.WithChangeFilter(params Type[]) 在作业结构上设置或附加到 中的参数。缩小查询范围,以便实体必须在给定组件的原型块中发生更改。Execute
  • Unity.Entities.WithOptions(params EntityQueryOptions[]) 在作业结构上设置。更改查询的范围以使用所述的 EntityQueryOptions。
  • Unity.Entities.EntityIndexInQuery 设置参数 in 以获取当前实体迭代的当前索引。这与Entities.ForEach中相同。

共有这些筛选方法
由于类似于Job,因此还可以使用在Job的所有属性

  • Unity.Burst.BurstCompile
  • Unity.Collections.DeallocateOnJobCompletion
  • Unity.Collections.NativeDisableParallelForRestriction
  • Unity.Burst.BurstDiscard
  • Unity.Collections.LowLevel.Unsafe.NativeSetThreadIndex
  • Unity.Collections.NativeDisableParallelForRestriction
  • Unity.Burst.NoAlias

Execute参数

  • IComponentData 可以标记为ref(读写)或者in(只读)
  • ICleanupComponentData 可以标记为ref(读写)或者in(只读)
  • ISharedComponent 只读,并且如果有该参数 无法使用 Burst,只能在主线程执行(Run())(这个我们后面在研究下这里不展开)
  • Managed components 使用值复制进行读写访问,或使用in进行托管组件的只读访问,并且无法进行突发编译,只能主线程执行
  • Entity 一个Id的复制,因此,不要用 ref 和 in 进行修饰
  • DynamicBuffer 获取DynamicBuffer 可以标记为ref(读写)或者in(只读)
  • IAspect 无法直接使用,但是可以通过值复制进行修改 可以标记为ref(读写)或者in(只读)
  • int 支持3种整数
    [Unity.Entities.ChunkIndexInQuery]标记以获取查询中的当前原型块索引
    [Unity.Entities.EntityIndexInChunk] 获取当前原型块中的当前实体索引。您可以添加 和 获取每个实体的唯一标识符
    [Unity.Entities.EntityIndexInQuery] 获取查询的打包索引。此参数在内部使用,这会对性能产生负面影响。

JobEntity大概就这些内容了文章来源地址https://www.toymoban.com/news/detail-861415.html

到了这里,关于Unity ECS学习(9)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Unity学习笔记】Unity TestRunner使用

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/135733479 作者:CSDN@|Ringleader| 参考: Input testing Getting started with Unity Test Framework HowToRunUnityUnitTest 如果对Unity的newInputSystem感兴趣可以参看我这篇文章:【Unity学习笔记】第十二 · New Input System 及其系统结构 和 源码浅

    2024年01月22日
    浏览(38)
  • 【Unity学习日记01】Unity的生命周期

    参考:Unity官方手册以及Unity生命周期 Unity的生命周期指的是Unity脚本从唤醒到销毁的过程,在这个过程里,Unity脚本会按预定顺序执行大量事件函数。 这些函数全部都是系统定义好的,需要继承MonoBehaviour类才能调用。脚本需要挂在任意游戏对象上,并且一个游戏对象可以挂载

    2024年02月11日
    浏览(38)
  • Unity学习笔记(一)Unity的界面和操作

    Unity官方教程 :Unity User Manual 2021.3 (LTS) - Unity 手册 UnityLearn :Learn Game Development Without Coding Experience | Unity 如何导入一个Asset Store的包? 以安装 Playground 为例。 (1)获取:从Asset StoreUnity Playground | 视频教程项目资源 | Unity Asset Store (2)导入:在 Asset Store (unity.com) 商店中选择

    2023年04月08日
    浏览(47)
  • 【Unity学习】Unity GetCurrentAnimatorStateInfo方法判断动画播放

    #好记忆不如烂笔头# 通过normalizedTime的来判断动画播放是否完成。这里是一个爆炸动画,爆炸结束后,动画消失。配合一个对象池管理器使用。

    2024年02月11日
    浏览(48)
  • 【Unity】Unity开发学习和项目实践02——创建第一个Unity项目和游戏物体

    创建第1个Unity项目 打开Unity hub,点击新项目 以下有四处地方需要注意选择: 1.Unity编辑器版本 2.项目模板 3.项目名称 4.项目保存位置 点击创建项目 ok,进入编辑器了 把编辑器界面布局稍微改一下,改成2by3 点击Edit 点击 project settings,这是对我们所创建工程的设置 此外还有对

    2024年01月25日
    浏览(63)
  • 【Unity】UnityWebRequest学习——Unity中的HTTP网络通信

    Unity中的HTTP通信主要依赖的是Unity自带的UnityWebRequest类。UnityWebRequest 提供了一个模块化系统,用于构成 HTTP 请求和处理 HTTP 响应。 UnityWebRequest 生态系统将 HTTP 事务分解为三个不同的操作: 向服务器提供数据 从服务器接收数据 HTTP 流量控制(例如,重定向和错误处理) 对于

    2024年01月23日
    浏览(67)
  • ChatGPT 学习 ES & lucene 底层写入原理,源码

    一直有个疑问“学习最新版lucene 数据写入相关的源码,应该看哪些源码,以什么顺序看(先看什么,后看什么)?” 在学习Lucene的数据写入相关的源码时,可以按照以下阶段的顺序进行学习和理解,以便更好地掌握Lucene的数据写入过程。同时,也需要了解一些相关的类和方

    2024年02月09日
    浏览(45)
  • 【学习笔记】Unity基础(十)【Unity界面之Scene窗口工具栏】

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/131707918 主要参考: 官方手册 Scene视图 注:本文使用的unity版本是2021.3.25f Scene 视图是正在创建的世界的交互式视图。Scene 视图可用于选择和定位景物、角色、摄像机、光源和所有其他类型的游戏对象。 本节将详细

    2024年02月06日
    浏览(51)
  • 【Unity开发必备】100多个 Unity 学习网址 资源 收藏整理大全【持续更新】

    众所周知,工欲善其事必先利其器,有一个好的工具可以让我们事半功倍,有一个好用的网站更是如此! 但是好用的网站真的太多了,收藏夹都满满的(但是几乎没打开用过😁)。 所以本文是对Unity相关的网站进行一个资源整合,可以让我们更方便的去学习Unity的更多知识内容

    2024年02月16日
    浏览(68)
  • Unity学习笔记(7) Unity2D骨骼动画制作流程

    用骨骼动画最大的好处就是方便之后做换装系统。 无论对3Dor2D游戏都是这样的。 这篇博文记录一下2D骨骼动画的制作流程,参考b站麦扣的系列教程: https://space.bilibili.com/370283072/channel/seriesdetail?sid=211996 用PS做一个将人物各个部件(骨骼)都分解开来的人物模型。 导出时注意

    2023年04月09日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包