一、解决碰撞检测穿透方法一

首先我们知道只要是跟碰撞相关的基本都是离不开刚体 Rigidbody这个组件,刚体中有一个参数适用于检测碰撞的 如下图

Collision Detection就是碰撞检测。

然而有时候开发游戏,对于高速运动的物体(比如:子弹/大炮,或者很高处自由落体的物体),即使再三确认加了Rigidbody组件,检查了碰撞检测的代码完全没有错误,但仍然会出现 物体直接穿过另一个物体 的问题, 则说明这个碰撞检测的程序对于高速运动的物体而言会出错。

Unity2017物体的Rigidbody组件提供了一个Collision Detection的属性,该属性用于更改物体的碰撞检测模式————一共有三种模式可以选择(选择你想要的模式,底层碰撞检测的算法均有差别)
(解释一下,上图每个箭头两端均指的是两个即将碰撞的物体的Collision Detection属性的值,箭头中间的属性值所指的是这两个物体时间碰撞所用的碰撞检测模式)

Discrete(离散型检测模式)就是普通的默认状态;
Continuous(连续检测)则是更加精细的碰撞检测,但是很耗资源;在这种状态下,当这个刚体与其他普通刚体碰撞时,仍将使用Discrete的碰撞检测,但是与没有刚体的Mesh Collider碰撞时就会连续检测了。
Continuous dynamic(动态连续检测)则是对没有刚体的Mesh Collider或是对处在Continuous或是Continuous Dynamic状态下的刚体使用连续碰撞检测,对其他的刚体使用普通的Discrete检测。
但是!!!必须得注意的是:

1.Continuous/Continuous dynamic(连续检测)–对物理性能有很大的影响,所以如果高速运动的物体的碰撞没有问题,应该设置为默认的 Discrete

2.Continuous/Continuous dynamic – 只支持使用Box,Sphere和Capusle碰撞器的刚体。(这一点是在以往网上的资料上发现的,查了Unity2017最新版手册,发现确实有说到Continuous支持Box,Sphere和Capusle)

2018之后又出了一个Continuous Speculative 这里官方的API解释是要比Continuous和Dynamic的方式这两种方式更加的节省性能,是扫描方式的进行连续碰撞检测。(猜测:才物体静止的时候不进行检测节省性能。在有位移的时候才进行连续碰撞检测)

总结:

Discrete适用于大部分刚体

Continuous适用于将有可能会被高速移动物体撞上的物体

Continuous Dynamic适用于高速移动的物体

使用连续碰撞检测(Continuous和Continuous Dynamic)前提:
刚体和刚体: 刚体的碰撞器必须是Box,Sphere,Capusle.
刚体和非刚体(静态碰撞器): 刚体物体的碰撞器必须是Box,Sphere,Capusle,非刚体物体的碰撞器必须是Mesh。

二、解决碰撞检测穿透方法二

不使用刚体 Rigidbody的方式,采用发射子弹之前,先发射射线,记录碰撞点(判断是否会发生碰撞),然后在发射子弹。

void Update ()
{Vector3 oriPos = transform.position;//记录原来的位置transform.Translate (Vector3.forward * speed * Time.deltaTime); //移动float length = (transform.position - oriPos).magnitude;//射线的长度Vector3 direction = transform.position - oriPos;//方向RaycastHit hitinfo;bool isCollider = Physics.Raycast (oriPos, direction,out hitinfo,length);//在两个位置之间发起一条射线,然后通过这条射线去检测有没有发生碰撞if(isCollider){....}
}

解决Unity物体速度过快无法进行碰撞检测(碰撞检测穿透)相关推荐

  1. 碰撞体速度过快穿透的问题

    问题:假设现在A物体以非常高的速度移动,而unity每一帧的检测时间大概是0.02秒,也就是说如果物体A速度过快, 在不用0.02秒的时间就已经穿过了其他物体,那么这个时候是无法检测A与其他物体之间的 ...

  2. Unity 物体(Rigibody组件)碰撞穿透、碰撞抖动

    一.碰撞穿透 碰撞条件:主角(移动的物体)带有Rigibody组件:墙体(受力物体)带有Collider组件 穿透的原因: 1.主角移动速度太快,墙体的Collider厚度太薄 2.主角和墙体都以一定 ...

  3. Unity物体围绕中中心旋转加角度

    Unity物体围绕中中心旋转加角度 ```csharp using System.Collections; using System.Collections.Generic; using UnityE ...

  4. js 拖拽元素 鼠标速度过快元素跟不上

    自己写一个拖拽元素,使用js拖拽元素时,鼠标速度过快时 元素跟不上鼠标 参考了网上的文章 ,里面对比了绑定到 body和document上的不同点js 拖拽元素 鼠标速度过快问题 明白过来是因为速度过 ...

  5. mac系统下,解决git clone速度慢导至失败的问题

    mac系统下,解决git clone速度慢导至失败的问题 参考文章: (1)mac系统下,解决git clone速度慢导至失败的问题 (2)https://www.cnblogs.com/helenM ...

  6. 解决docker pull 速度慢问题

    解决docker pull 速度慢问题 参考文章: (1)解决docker pull 速度慢问题 (2)https://www.cnblogs.com/BillyYoung/p/11113914.ht ...

  7. 树莓派-解决apt-get upgrade速度慢的方法[更换阿里云源]

    树莓派-解决apt-get upgrade速度慢的方法[更换阿里云源] 参考文章: (1)树莓派-解决apt-get upgrade速度慢的方法[更换阿里云源] (2)https://www.cnbl ...

  8. IIS优化-解决IIS访问速度慢问题

    2019独角兽企业重金招聘Python工程师标准>>> 环境是:Windows server 2003 SP2+IIS+PHP+MYSQL 硬件:双路CPU8核+8G内存+2X147 ...

  9. 解决unity 打包在Android 8.0上启动出现黑屏问题(Android权限弹窗问题)

    解决unity 打包在Android 8.0上启动出现黑屏问题 本文链接:https://blog.csdn.net/baidu_34248947/article/details/89377983 我 ...

最新文章

  1. 【Java Web开发指南】解析Spring中Ioc和DI(入门Demo)
  2. VC6.0 预编译(转)
  3. git show HEAD^num和个git show HEAD~num的区别
  4. codeforce 606A - Magic Spheres
  5. 使用mongoose 在 Node中操作MongoDB数据库
  6. dhh basecamp_使Basecamp的薪酬透明化保留了人才
  7. 网络安全:个人网站防黑安全技巧
  8. 四大行的CIO们如何看待大数据
  9. markdown下载破解地址 和 常用语法
  10. 学习Java,可以从事哪些岗位?
  11. 水木周平戏说中国网络黑幽默
  12. Self-Attention with Relative Position Representations(2018)
  13. 张氏华孙公 福建省上杭县张氏第一代开基祖宗
  14. 安得广厦千万间,大赚天下寒士俱欢颜
  15. ASPICE SWE3之——C代码生成软件详细设计1 Doxygen配置
  16. 计算机传奇人物之詹姆斯.高斯林
  17. 16g电脑内存有什么好处_电脑内存4G/8G/16G有什么区别?
  18. 用这个神器玩虚荣/最终荣耀手游,效果秒杀模拟器和手机党
  19. 八数码--Astar--启发函数
  20. 米思齐学习例程(五):中断延时

热门文章

  1. 基于GIS技术的城市交通管理应用
  2. Monitor 采集方式
  3. 基于灰色模型的端口短信预测和垃圾短信治理研究
  4. Matlab-VISSIM联合仿真
  5. springboot整合redis缓存报错
  6. PTA 02-线性结构3 Reversing Linked List 题目解析
  7. LUR 算法 原理(附带自己实现源码)
  8. [医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey
  9. 2021年高考安庆10中成绩查询,2021年安庆高中学校排名及录取分数线排名
  10. 交通流预测爬坑记(二):最简单的LSTM预测交通流,使用tensorflow2实现