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

Unity C#错误CS0103:名称‘collision’在当前上下文中不存在

问题解决:Character Controller碰撞检测错误及OnCollisionEnter无效问题

1. 修复“名称‘collision’在当前上下文中不存在”错误

你代码里的问题很直接:OnControllerColliderHit方法的参数是hit,但你在判断时误用了未定义的collision变量,把collision替换成hit就能解决这个编译错误。

修正后的代码:

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

public class PlayerTouched : MonoBehaviour
{
    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if (hit.gameObject.CompareTag("Water"))
        {
            Debug.Log("it worked!!");
        }
    }
}

额外提示:用CompareTag比直接访问tag属性更高效,还能避免拼写错误导致的隐藏问题。

2. 为什么OnCollisionEnter没效果

Character Controller组件的碰撞逻辑和常规Collider不同:它不会触发OnCollisionEnter、OnCollisionStay这类标准碰撞事件,因为它是通过自身Move方法模拟的胶囊体碰撞,而非物理引擎的刚体碰撞交互。所以必须使用OnControllerColliderHit来检测它和其他Collider的接触。

另外还要注意两个前提:

  • 确保玩家物体上挂载了Character Controller组件,且脚本挂在同一个物体上
  • 确保Water物体上有启用的Collider组件(若用Trigger,还需在Character Controller的设置里勾选“Trigger Colliders”,或改用Physics.OverlapCapsule主动检测)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00