【Unity学习过程踩坑记录】出现子弹穿透的几个原因

问题描述:

除了之前遇到的没有选择指定的Layer之外,还是会发生子弹穿透的问题。

 

原因:

第七讲里老师直接指明以下两个原因:

  1. 当子弹生成位置在敌人内部时,不会检测到射线碰撞。所以这里在子弹的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[]
     */
  2. 假设当前帧,敌人和子弹存在一定距离,也没有检测到碰撞。但是由于敌人也在移动,(高速情况下)下一帧两者即发生了碰撞,此时子弹在敌人内部(或已经分离),所以仍然无法检测到碰撞。

  

老师用到的方法即在射线碰撞检测时,主动将敌人移动的这段距离也补偿上,这里直接设为0.1f。

 

posted @ 2022-07-22 23:54  cno700  阅读(478)  评论(0编辑  收藏  举报