You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
        }
    }
}

修正后的逻辑:

  1. 先判断是否击中头部,成立则输出爆头日志;
  2. 若未击中头部,再判断是否击中身体或脚部,成立则输出非爆头日志;
  3. 前两个条件都不满足时,才执行未击中的分支。

内容的提问来源于stack exchange,提问作者Llama Cookies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:45:37