简述网站的建设流程,电子商务网站开发进什么科目,市场营销平台,做公众号首图网站解决Unity物体速度过快无法进行碰撞检测#xff08;碰撞检测穿透#xff09; 一、解决碰撞检测穿透方法一Collision Detection碰撞检测总结#xff1a; 二、解决碰撞检测穿透方法二 一、解决碰撞检测穿透方法一
首先我们知道只要是跟碰撞相关的基本都是离不开刚体 Rigidbod… 解决Unity物体速度过快无法进行碰撞检测碰撞检测穿透 一、解决碰撞检测穿透方法一Collision Detection碰撞检测总结 二、解决碰撞检测穿透方法二 一、解决碰撞检测穿透方法一
首先我们知道只要是跟碰撞相关的基本都是离不开刚体 Rigidbody这个组件刚体中有一个参数适用于检测碰撞的 如下图
Collision Detection碰撞检测
然而有时候开发游戏对于高速运动的物体比如子弹/大炮或者很高处自由落体的物体即使再三确认加了Rigidbody组件检查了碰撞检测的代码完全没有错误但仍然会出现 物体直接穿过另一个物体 的问题 则说明这个碰撞检测的程序对于高速运动的物体而言会出错。
Unity2017物体的Rigidbody组件提供了一个Collision Detection的属性该属性用于更改物体的碰撞检测模式————一共有三种模式可以选择选择你想要的模式底层碰撞检测的算法均有差别 (解释一下上图每个箭头两端均指的是两个即将碰撞的物体的Collision Detection属性的值箭头中间的属性值所指的是这两个物体时间碰撞所用的碰撞检测模式)
Discrete离散型检测模式就是普通的默认状态
Continuous连续检测则是更加精细的碰撞检测但是很耗资源在这种状态下当这个刚体与其他普通刚体碰撞时仍将使用Discrete的碰撞检测但是与没有刚体的Mesh Collider碰撞时就会连续检测了。
Continuous dynamic动态连续检测则是对没有刚体的Mesh Collider或是对处在Continuous或是Continuous Dynamic状态下的刚体使用连续碰撞检测对其他的刚体使用普通的Discrete检测。
但是必须得注意的是 Continuous/Continuous dynamic(连续检测)–对物理性能有很大的影响所以如果高速运动的物体的碰撞没有问题应该设置为默认的 Discrete 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){....}
}