OnCollisionEnter2D函数无法工作:尝试多种方法仍报错
Unity碰撞回调错误修复方案
问题根源
- 参数类型不匹配:Unity内置的
OnCollisionEnter2D必须接收Collision2D类型参数,你写成了Collider2D,导致引擎无法正常触发回调,直接抛出错误。 - 错误手动调用回调:
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
相关产品推荐
相关产品推荐

