关于碰撞问题的解决_第1页
关于碰撞问题的解决_第2页
关于碰撞问题的解决_第3页
关于碰撞问题的解决_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

碰撞检测问题及解决 在 Unity3D 中,碰撞可以形象理解为现实世界中的碰撞,并且由于物理引擎的模拟, 使碰撞物体也会如现实世界一样产生相同的碰撞结果,如运动轨迹的改变、反弹等,总之 碰撞的结果为产生我们不期望的物体运动行为。为了避免产生这种碰撞,就需要进行碰撞 检测。 碰撞检测实现一 碰撞检测的原理是在物体移动的前方放置一个虚拟物体,它与物体进行同步运动。如 果有障碍,则要先与虚拟物体碰撞。一旦检测到虚拟物体的碰撞,则运动物体停止移动。 实现时则是使用虚拟射线来进行检测,检测时使用到的 api 分别如下截图: 图 - 1 Physic.Raycast 射线扫描 API 碰撞检测的具体实现如下截图: 图 - 2 碰撞检测 碰撞检测的调用实现如下截图: 图 - 3 调用碰撞的实现 实现一的问题及分析 以上实现经过分析,原理想法上没问题,就是每隔一个固定频率后进行射线碰撞检测。 但是效果上却总是会在一些偶然的情况下发生碰撞,具体情形如下截图: 创建人:guofc 创建时间:2013 年 3 月 22 日 3 / 4 图 - 4 碰撞导致不期望的运动 Update 受制于 FPS 问题 经过分析,发现 update 虽然是每帧执行的,但是 Unity3D 的 FPS每秒的帧数,是 变化的,它的值取决于渲染场景的面数;渲染速度又受机器的性能特别是 CPU、内存、显 卡不同而表现很大的差异。如果场景中渲染的面数太多,并且机器配置不够好,可能导致 FPS 很低,从而使渲染的两帧之间时间间隔很大,而在这个间隔内,碰撞已经发生,从而 出现了上面的碰撞现象。 对于物理运动中需要进行固定频率的动作,Unity3D 提供了 FixedUpdate 方法,这个频 率是系统参数,可以更改。因此,我们使用 FixedUpdate 来替换 Update 可解决此问题。 射线检测问题 如 图 - 2 碰撞检测 实现中,虽然多加了几条射线,但毕竟只是物体中的个别点。在 我们的场景中,物体都是规则的且正常运动规律显著,所以只需要把几个特征点找到然后 分别进行射线检测即可。但是这个毕竟是存在缺陷的,如果能够对物体整个面进行检测, 那就完美了。 幸运的是,自 Unity3D 版本 3 以来,针对刚体的碰撞检测问题,专门提供了 Rigidbody.SweepTest 方法。需要注意的是 Physics.Raycast 里面有一个层的概念,而且不是 必须刚体才会被检测到;而 Rigidbody.SweepTest 则只检测刚体碰撞,与层无关。 碰撞检测的改善性实现 经过以上分析,可以知道碰撞检测会用到关键性方法 Rigidbody.SweepTest,它的 API 如下截图: 图 - 5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论