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

Unity中OnCollisionEnter异常:进入Play模式即触发碰撞计数

Unity中OnCollisionEnter初始异常触发问题

问题描述

进入Play模式后,即使Player对象保持静止,OnCollisionEnter函数也会在初始阶段被触发一次,输出Debug日志,该触发属于非预期行为。

关联代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Scorer : MonoBehaviour
{
    private void OnCollisionEnter(Collision other)
    {
        Debug.Log("You've bumped into a thing this many times: ");
    }
}

运行现象

Debug面板在Play模式启动瞬间自动输出一条碰撞日志,此时Player未执行任何移动操作。

原因分析与解决方法

核心原因

场景加载完成后,Player对象与场景中的其他碰撞体(如地面)在初始位置处于重叠状态,Unity会在Play模式启动的第一帧触发OnCollisionEnter来处理这种初始碰撞重叠。

解决思路

  1. 调整初始位置
    检查Player与场景中其他碰撞体的位置关系,微调Player的初始坐标,使其与所有碰撞体保持一定距离,避免加载时的重叠。

  2. 添加初始触发过滤
    通过变量标记忽略第一次碰撞触发,修改代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Scorer : MonoBehaviour
    {
        private bool ignoreFirstCollision = true;
    
        private void OnCollisionEnter(Collision other)
        {
            if (ignoreFirstCollision)
            {
                ignoreFirstCollision = false;
                return;
            }
            Debug.Log("You've bumped into a thing this many times: ");
        }
    }
    
  3. 碰撞体配置优化
    如果不需要Player与特定物体的初始碰撞,可以在对应碰撞体的Layer设置中,通过碰撞矩阵屏蔽两者的碰撞检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:08