首页 > 其他分享 >最新UnityDOTS Physics物理引擎碰撞查询核心分析

最新UnityDOTS Physics物理引擎碰撞查询核心分析

时间:2023-12-21 14:57:53浏览次数:33  
标签:返回 UnityDOTS 碰撞 查询 引擎 Physics 物体 物理

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞查询以及核心相关概念。

Unity.Physics碰撞查询概述

碰撞查询(Collison Qurey)是Unity.Physics物理引擎中的一个很重要的功能。很多游戏逻辑都需要基于碰撞查询来实现,比如一个子弹是否打到了物体,具体打在了哪个部位,这些都需要依赖Collison Qurey来实现。Unity Physics物理引擎有强大的碰撞查询功能,包含了:射线检测,形状检测,最近点计算等。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

碰撞查询(Collison Qurey)计算的时候,读取的是物理引擎里面的内部数据,更准确的说是broadphase阶段的内部数据。Broadphase阶段的计算发生在PhysicsInitializeGroup中计算。当我们完成broadphase 阶段的计算后,只有到下一次PhysicsInitializeGroup碰撞查询所需要数据才会更新。所以我们在DOTS编写代码的时候,要把碰撞查询的System代码放在PhysicsInitializeGroup之前或之后。如果你想要获得更精准的碰撞查询信息,可以在PhysicsSimulationGroup完成物理迭代的计算后,同步更新最新的物理数据到碰撞查询所需要的数据结构中,这样碰撞查询更精准但是也会消耗更多的性能。如果需要物理引擎迭代计算完后把数据同步到Collision Qurey所依赖的内部数据中,我们只要的打开SynchronizeCollisionWorld开关就可以了(组件PhysicsStep.SynchronizeCollisionWorld)。如果开启了SynchronizeCollisionWorld属性,我们需要把碰撞查询的代码逻辑System执行顺序放在PhysicsInitializeGroup之前或PhysicsSimulationGroup之后。

碰撞查询可以针对单个的碰撞器或者是整个物理世界。当我们是对整个物理世界来作查询的时候,内部是基于一个a bounding volume tree结构来作高效的碰撞查询。你也可以创建独立于物理世界的碰撞世界。如果你使用的是物理世界,那么碰撞查询所需要的数据都是发生在物理迭代计算的broad phase阶段。

Unity Physics支持的碰撞检测类型

射线检测(Ray Cast):

沿着射线或线段的方向找出所有or最近的相交的物体。输入为Start(起点), End(终点),Filter(检测过滤标记)。返回为一个碰撞检测的集合。注意射线检测传过一个物体后,返回的结果只有开始进入的那个点,从物体出来的那个点不会被计算出来。

碰撞器检测(Collider cast):

给定一个特定的形状,沿着一条直线的起点到终点的方向来做碰撞测试,这个形状撞到空间中的物体就返回碰撞结果。如下图所示,橙色的碰撞器沿着直线的方向与黄色的物体相交,相交的性质与位置在紫色的地方。返回紫色与黄色物体相交的碰撞信息。

动图封面  

距离检测(Distance query)

Point Distance Query: 给定一个原点O,给定一个最大的半径(maximum radius),向四周发散,当射线撞到空间中的物体后,返回物体表面到给定原点O距离最近的点。

Collider Distance Queries: 给定一个物理世界里面的Collider,给定一个最大的半径,向四周发散,放回从Collider到物体表面最近的两个点。

动图封面  

碰撞检测返回的主要数据类型:

Fraction: 返回特定方向上与交点的比例系数;

Position:返回物体表面交点的世界坐标;

SurfaceNormal: 返回物体表面的交点的法线

RigidBodyIndex:返回碰撞查询世界里面的刚体所在的索引;

Entity:返回碰撞查询世界中刚体所对应的Entity;

ColliderKey: 返回碰撞所在的三角形面的更加详细的内部信息;

Material: 返回碰撞所对应的材质信息;

今天的分享就到这里,需要本篇文章完整的项目工具与源码的同学可以关注我们

标签:返回,UnityDOTS,碰撞,查询,引擎,Physics,物体,物理
From: https://www.cnblogs.com/bycw/p/17919035.html

相关文章

  • 火山引擎ByteHouse基于云原生架构的实时导入探索与实践
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群随着企业降本增效、智能化数据决策需求的增强,传统的商业数据库已经难以满足和响应快速增长的业务诉求。在此背景下,云原生数据库成为大势所趋。云原生数据库基于云平台构建、部署和分发,具有高可用......
  • Unity DOTS物理引擎的核心分析与详解
    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。Unity.Physics的设计哲学Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现,包含了物理刚体的迭代计算与碰撞检测等查询。Unity.Physic......
  • 使用汇编和反汇编引擎写一个x86任意地址hook
    最简单的Hook刚开始学的时候,用的hook都是最基础的5字节hook,也不会使用hook框架,hook流程如下:构建一个jmp指令跳转到你的函数(函数需定义为裸函数)保存被hook地址的至少5字节机器码,然后写入构建的jmp指令接着在你的代码里做你想要的操作以内联汇编的形式执行被hook地址5字节机......
  • 风控决策引擎——决策流构建实战
    引言本篇主要聚焦介绍风控决策引擎中决策树编排能力的构建。决策引擎是风控的大脑,而决策树的编排能力和体验是构建大脑的手段,如何构建高效、丝滑、稳定可靠的决策树编排能力,是对风控决策引擎的一大挑战,本篇文章和大家分享一下过往构建心得。背景任何系统在初期构建肯定不是往“......
  • 从0到1智能风控决策引擎构建
    引言互联网时代,万物互联,网络安全形势越来越严峻,安全是企业的基石,风控在企业中扮演着“警察”角色,运用各种技术和手段,保护企业内的用户利益不受侵害。风控决策引是风控中台的入口,提供业务风险场景事件接入,可视化编排复杂决策,丰富的特征变量与场景识别服务等功能。相较于需要开发背......
  • 搭建风控规则引擎
    作者:是咕咕鸡链接:https://www.zhihu.com/question/65314241/answer/2707684336来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。引言互联网时代,万物互联,网络安全形势越来越严峻,安全是企业的基石,风控在企业中扮演着“警察”角色,运用各种技术和手段......
  • Unity引擎2D游戏开发,实装攻击判定
    判断伤害触发动画帧观察动画,发现只需要在第4帧时才进行伤害,即发生剑影的那一帧。其他动画同理添加碰撞盒目前不需要再玩家Player身上建立过多的碰撞体,因为采用新的方式选中Player,右击选择CreateEmpty,创建一个子级对象。命名为,AttackArea并在AttackArea下方再创建三个......
  • Unity 3D定点数物理引擎实战系列1.1BEPUphysicsint 3D定点数物理引擎介绍
    1.1BEPUphysicsint3D定点数物理引擎介绍对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理......
  • Unity引擎2D游戏开发,三段攻击动画的实现
    新建三段动画的Animation将Project中的三段攻击动画的素材,拖入到Animation窗口,分别命名为BlueAttack1,BlueAttack2,BlueAttack3在Animator中创建动画图层并进行进一步的操作创建新的动画图层,命名为AttackLayer在窗口中创建新的State,作为默认上一层的state入口将之前创建好......
  • 给网站引入各大搜索引擎的关键字提示,白给的接口薅他羊毛。
    拥有一个关键词提示属于是导航网站必要的了因为网站是个导航网站,有一个搜索框,用户搜索时需要像百度一样有个搜索提示关键词列表。之前只是用百度,现在给增加了好几个,想换那个就换那个了,直接上图片可以配置属于是想选哪个选哪个,谁提示不爽就不用它,我可以用着bing的搜索引擎却使用......