Unity中碰撞检测代码的if与else为何同时执行?
碰撞检测中if与else同时执行的问题解决
你的代码逻辑问题出在第二个if和else是绑定的独立分支,和第一个if没有关联:
- 当碰撞到头部时,第一个
if(collision.collider == head)条件成立,输出"HeadShot"; - 接着执行第二个
if(collision.collider == body || collision.collider == feet),此时条件不成立,就会进入它绑定的else块,输出"You've missed the target"; - 这就导致两个分支的日志同时打印。
要实现「仅当两个if条件都不成立时才执行else」,需要把三个分支改成互斥的判断结构,用else if连接即可:
private void OnCollisionEnter(Collision collision) { if (interations.won && interations.currentlyPickedUpObject == null) { if (collision.collider == head) { Debug.Log("HeadShot"); } else if (collision.collider == body || collision.collider == feet) { Debug.Log("Not a HeadShot"); } else { Debug.Log("You've missed the target"); } } }
修正后的逻辑:
- 先判断是否击中头部,成立则输出爆头日志;
- 若未击中头部,再判断是否击中身体或脚部,成立则输出非爆头日志;
- 前两个条件都不满足时,才执行未击中的分支。
内容的提问来源于stack exchange,提问作者Llama Cookies
相关产品推荐
相关产品推荐

