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

OnCollisionEnter2D函数无法工作:尝试多种方法仍报错

Unity碰撞回调错误修复方案

问题根源

  1. 参数类型不匹配:Unity内置的OnCollisionEnter2D必须接收Collision2D类型参数,你写成了Collider2D,导致引擎无法正常触发回调,直接抛出错误。
  2. 错误手动调用回调:OnCollisionEnter2D是Unity自动触发的碰撞事件,不需要在Update里手动调用,你传自己的碰撞体属于逻辑错误。

修正代码

正确的碰撞回调函数

private void OnCollisionEnter2D(Collision2D collision)
{
    // 从Collision2D对象中获取碰撞到的Collider
    if (collision.collider.gameObject.name == "ColliderLeft")
    {
        Debug.Log("Left");
        // 修正位置赋值语法,transform.position是属性,需用=赋值
        transform.position = new Vector2(-9.5f, transform.position.y);
    }
}

删除冗余代码

把以下无效代码全部删掉:

public Collider2D collider;

void Start()
{
    collider = GetComponent<Collider2D>();
}

void Update()
{
    OnCollisionEnter2D(collider);
}

额外检查项

  • 确保碰撞双方都挂载了Collider2D组件,且其中至少一个对象带有Rigidbody2D(无刚体的话碰撞事件不会触发)。
  • 如果碰撞体勾选了Is Trigger,要改用OnTriggerEnter2D(Collider2D other)回调函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:02:12