Unity移动端2D项目碰撞检测代码不触发控制台无输出问题求助
Unity 2D项目碰撞检测不生效原因及修复方案
最高概率核心问题
你当前使用的OnCollisionEnter是Unity 3D物理系统的碰撞回调函数,不适用于2D项目,2D物理体系的碰撞回调对应为OnCollisionEnter2D,参数类型应为Collision2D。
其他可能导致失效的原因
- 碰撞体组件类型不匹配:2D项目中所有参与碰撞的对象必须挂载2D类型碰撞体(如
BoxCollider2D、CircleCollider2D),使用3D碰撞体不会触发2D物理碰撞事件 - 缺少2D刚体组件:参与碰撞的两个对象中,至少有一个需要挂载
Rigidbody2D组件,否则Unity 2D物理引擎不会派发碰撞事件;如果不需要重力效果可将Rigidbody2D的Gravity Scale属性设为0 - 标签匹配错误:Unity标签大小写敏感,需确认碰撞目标对象的标签严格等于
Finish,不存在拼写、大小写偏差 - 碰撞体开启了触发属性:如果任意一方碰撞体勾选了
Is Trigger选项,将不会触发碰撞回调,只会触发触发回调,此时要么关闭Is Trigger,要么改用OnTriggerEnter2D函数 - 层碰撞被禁用:检查Unity编辑器
编辑>项目设置>物理2D>层级碰撞矩阵中,玩家和Finish对象所在层级的碰撞权限是否开启 - 组件未激活:确认玩家对象和挂载的
PlayerCollision脚本都处于启用状态(组件前的勾选框为选中状态)
修正后的2D碰撞检测代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerCollision : MonoBehaviour { void Start() { } void Update() { } void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.tag == "Finish") { Debug.Log("Level Finished"); } } }
内容的提问来源于stack exchange,提问作者Nikolathedev
相关产品推荐
相关产品推荐

