【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。
分类:
Unity
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!