【Unity学习过程踩坑记录】出现子弹穿透的几个原因
问题描述:
除了之前遇到的没有选择指定的Layer之外,还是会发生子弹穿透的问题。
原因:
第七讲里老师直接指明以下两个原因:
- 当子弹生成位置在敌人内部时,不会检测到射线碰撞。所以这里在子弹的Start方法里先判断在该位置是否有敌人,如果有,则直接触发相应方法。检测用到的API是Physics.OverlapSphere()。
// 返回以参数1为原点、参数2为半径的球体内“满足一定条件”的碰撞体集合。 Physics.OverlapSphere(Vector3 position, float radius); Physics.OverlapSphere(Vector3 position, float radius, int layerMask; /* * 形参 * position 3D相交球的球心 * radius 3D相交球的半径 * layerMask 在某个Layer层上进行碰撞体检索 * * 返回值 * Collider[] */
- 假设当前帧,敌人和子弹存在一定距离,也没有检测到碰撞。但是由于敌人也在移动,(高速情况下)下一帧两者即发生了碰撞,此时子弹在敌人内部(或已经分离),所以仍然无法检测到碰撞。
老师用到的方法即在射线碰撞检测时,主动将敌人移动的这段距离也补偿上,这里直接设为0.1f。