最新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: 返回碰撞所对应的材质信息;

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容