DOTS Unity.Physics物理引擎碰撞查询核心分析

这篇具有很好参考价值的文章主要介绍了DOTS Unity.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之后。   

DOTS Unity.Physics物理引擎碰撞查询核心分析,游戏开发,Unity3d,游戏引擎,unity,游戏引擎,游戏开发,unity3d,游戏程序

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

Unity Physics支持的碰撞检测类型

  • 射线检测(Ray Cast):

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

  • 碰撞器检测(Collider cast):

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

    DOTS Unity.Physics物理引擎碰撞查询核心分析,游戏开发,Unity3d,游戏引擎,unity,游戏引擎,游戏开发,unity3d,游戏程序
  • 距离检测(Distance query)

    • Point Distance Query: 给定一个原点O,给定一个最大的半径(maximum radius),向四周发散,当射线撞到空间中的物体后,返回物体表面到给定原点O距离最近的点。
    • Collider Distance Queries: 给定一个物理世界里面的Collider,给定一个最大的半径,向四周发散,放回从Collider到物体表面最近的两个点。   DOTS Unity.Physics物理引擎碰撞查询核心分析,游戏开发,Unity3d,游戏引擎,unity,游戏引擎,游戏开发,unity3d,游戏程序

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

  • Fraction: 返回特定方向上与交点的比例系数;
  • Position:返回物体表面交点的世界坐标;
  • SurfaceNormal: 返回物体表面的交点的法线
  • RigidBodyIndex:返回碰撞查询世界里面的刚体所在的索引;
  • Entity:返回碰撞查询世界中刚体所对应的Entity;
  • ColliderKey: 返回碰撞所在的三角形面的更加详细的内部信息;
  • Material: 返回碰撞所对应的材质信息;

  今天的分享就到这里,关注我们 + 企.鹅.裙 428 540 563 获取更多的DOTS的相关资料


  下面是DOTS的VIP课程前18节视频,免费观看

Unity DOTS进阶与项目实战(B站18集)

第001课DOTS的环境安装与准备事项

第002课 DOTS的核心机制与概述

第003课DOTS的SubScene

第004课Component的概述与普通组件的Baker

第005课System与SystemGroup概述

第006课DOTS中的ECS核心概念总结

第007课Baking系列之Baking与Baker详解

第008课Baking系列之BakingSystem与BakingWorld详解

第009课FilterBakingOutput与PrefabsInBaking

第010课BlobAsset核心机制分析

第011课Aspect核心机制分析

第012课 StructChange核心机制详解

第013课Managed与Unmanaged Component详解与性能分析

第014课ShareComponent核心机制与性能分析

第015课CleanupComponent核心分析

第016课 Dynamic Buffer Component详解与分析

第017课Tag与Chunk Component详解与分析

第018课Enableable与Singleton组件详解与分析文章来源地址https://www.toymoban.com/news/detail-857221.html

到了这里,关于DOTS Unity.Physics物理引擎碰撞查询核心分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity --- 物理引擎 --- 触发器 与 碰撞器详解

    对第一个条件进行补充 --- 不仅要两者都具有碰撞组件,同时还需要两者的碰撞组件中都没有勾选 Is Trigger属性  1.上一篇文章中说了那么多,其实也可以总结为两个碰撞条件 --- a.两个游戏物体都具有碰撞器组件 ,如果没有的话,连碰撞检测都不会发生,也就没有所谓的碰不

    2024年02月07日
    浏览(34)
  • Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider

      1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Unity中提供的已经准备好的各种形状的碰撞器组件 2.形成不同形状的碰撞器所需的面数不同,面数

    2024年02月16日
    浏览(28)
  • 深入分析物理引擎后,他写了一个轻量的 Cocos 3D 碰撞检测优化方案

    引言: 碰撞检测是游戏开发中一个非常重要的技术点,优化碰撞检测性能,是提升游戏体验不可或缺的一环。开发者「我叫98K」写了一个轻量碰撞系统,用以改善 3D 游戏在不同平台遇到的碰撞性能问题和包体问题。下载和在线体验地址见文末。 98K物理-轻量碰撞系统是一个高

    2024年02月03日
    浏览(29)
  • Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

    最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的baker过程种,

    2024年02月04日
    浏览(40)
  • Unity常用方法--Physics2D.OverlapCircleAll(获取一个圆形区域内所有碰撞器的列表)

    使用方式请直接看参考文献 使用案例 可以通过该方法判断在攻击范围内是否存在敌人,并在存在时,调用敌人组件的内部函数 代码 参考文献   https://docs.unity3d.com/cn/current/ScriptReference/Physics2D.OverlapCircleAll.html

    2024年04月10日
    浏览(26)
  • unity物理碰撞操作方案

    经unity官方网站资料改写整理书写本博客,原网址方案链接如下: Lesson 2.4 - Collision Decisions - Unity Learn 首先  1.先创建两个物体  然后   2.给这两个物体加上Box Collider 组件,并勾选“是触发器”(英文:is 啥啥的) 注意两个都要添加这组件,并且进行相同的操作,都要勾选“

    2024年02月08日
    浏览(25)
  • Unity入门7——物理系统之碰撞检测

    一、刚体 Rigid Body ​ 刚体利用体积(碰撞器 Collider)进行碰撞计算,模拟真实的碰撞效果,产生力的作用 ​ 碰撞产生的必要条件: 两个物体都有碰撞器 Collider 至少一个物体有刚体 Mass:质量 默认为千克,质量越大惯性越大 Drag:空气阻力 根据力移动对象时影响空气阻力大

    2024年02月09日
    浏览(36)
  • Unity UGUI的Physics2DRaycaster (2D物理射线检测)组件的介绍及使用

    Physics2DRaycaster是Unity中的一个UGUI组件,用于在2D场景中进行物理射线检测。它可以检测鼠标或触摸事件在UI元素上的碰撞,并将事件传递给相应的UI元素。 Physics2DRaycaster通过发射一条射线来检测UI元素的碰撞。当射线与UI元素相交时,Physics2DRaycaster会将事件传递给相应的UI元素,

    2024年02月15日
    浏览(35)
  • 2022-04-20 Unity入门7——物理系统之碰撞检测

    一、刚体 Rigid Body ​ 刚体利用体积(碰撞器 Collider)进行碰撞计算,模拟真实的碰撞效果,产生力的作用 ​ 碰撞产生的必要条件: 两个物体都有碰撞器 Collider 至少一个物体有刚体 Mass:质量 默认为千克,质量越大惯性越大 Drag:空气阻力 根据力移动对象时影响空气阻力大

    2023年04月09日
    浏览(25)
  • Unity核心3——2D物理系统

    ​ 刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的 ​ 2D 物理系统中的刚体和 3D 中的刚体基本是一样的,最大的区别是对象只会在 XY 平面中移动,并且只在垂直于该平面的轴上旋转 ​ 不同于 3D 刚体,2D 刚体具有以下三种类型: ​ 物体会受到力的影响移动和

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包