【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 @   cno700  阅读(522)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示