【Unity学习过程踩坑记录】使用射线检测时子弹会穿透目标

问题描述:
使用子弹射击目标,采用的是射线检测Physics.Raycast()方法。但是打出的很多子弹直接穿透目标,没有出现碰撞效果,但是仍有很低的概率命中。

 

解决:
在视频评论区的提示下,发现Physics.Raycast()方法中有个参数是LayerMask collisionMask,表示只选择属于该Layer的碰撞器,其他层内碰撞器忽略。我去看了一下在Bullet组件面板,果然没有将该变量选择为Enemy的所处Layer,默认为Nothing,虽然我记得我之前选了……

相关API:

bool Pyhsics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
bool Pyhsics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
bool Physics.Raycast(Ray ray, float distance, int layerMask)
bool Physics.Raycast(Ray ray, RaycastHit out hit, float distance, int layerMask)
// 当光线投射与任何碰撞器交叉时为真,否则为假。
// 其中out关键字表示将碰撞的细节信息传给hit,如获取碰撞物体的transform等信息。

 

这么做确实解决了问题,子弹看上去总是能击中目标。但是仍然有个疑惑,那就是在我选择Layer之前,子弹还是有可能击中敌人并摧毁,目前原因不明。

视频学习地址:

【Unity】射击小游戏教程 P5 4.伤害系统

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