Unity 物理组件使用笔记(含2D/3D/2\.5D角色区分)

张开发
2026/4/16 19:58:15 15 分钟阅读

分享文章

Unity 物理组件使用笔记(含2D/3D/2\.5D角色区分)
核心组件碰撞体、刚体、角色控制器一、碰撞体Collider1. 核心作用定义物体的物理碰撞边界是所有碰撞 / 触发检测的基础2D、3D 和 2.5D 场景需用对应适配版本。2. 2D/3D/2.5D 组件区分维度组件类型常用示例触发事件3DBoxCollider、SphereCollider、MeshCollider墙、箱子、地形OnCollisionEnter/OnTriggerEnter2DBoxCollider2D、CircleCollider2D、PolygonCollider2D2D 平台、2D 敌人、道具OnCollisionEnter2D/OnTriggerEnter2D2.5D伪3D优先用BoxCollider3D也可适配BoxCollider2D需锁定Z轴2.5D 平台、斜视角角色、伪3D道具同3D用OnCollisionEnter适配2D组件则用OnCollisionEnter2D3. 使用时机物体需要被碰撞阻挡如 3D 墙、2D 地面、2.5D 平台。物体需要触发事件如道具拾取区、门的感应区需勾选Is Trigger选项。4. 注意事项静态物体如 3D 地形、2D 背景墙、2.5D 静态场景仅需加对应碰撞体无需其他组件性能最优。无碰撞体的物体会互相穿透触发事件也无法生效。2.5D 场景若用3D碰撞体需锁定Z轴移动/旋转避免物体偏离2.5D固定视角平面若用2D碰撞体需确保所有物体在同一Z轴平面保证碰撞检测准确。二、刚体Rigidbody1. 核心作用让物体服从物理定律受重力、外力驱动运动由物理引擎控制2D/3D/2.5D 需用对应适配版本。2. 2D/3D/2.5D 组件区分维度组件类型关键属性差异3DRigidbody控制 X/Y/Z 三轴的移动和旋转2DRigidbody2D仅控制 X/Y 轴的移动和旋转新增gravityScale重力缩放2.5D伪3D优先用Rigidbody3D也可适配Rigidbody2D用3D刚体需冻结Z轴移动/旋转用2D刚体则完全适配无需额外调整3. 使用时机维度适用场景3D掉落的木箱、发射的炮弹、被爆炸击飞的杂物、汽车、布娃娃系统2D2D 掉落的石块、子弹、漂浮的道具、受外力推动的 2D 箱子2.5D伪3D2.5D 掉落的道具、斜视角炮弹、受外力推动的伪3D箱子4. 关键属性设置通用 差异属性作用3D 适用场景2D 适用场景2.5D 适用场景Use Gravity3D/gravityScale2D3D是否受重力2D重力影响程度掉落物体开浮空物体关设为 0 则无重力gt;0 则受重力可微调重力大小同3D/2D用3D刚体开Use Gravity用2D刚体调gravityScaleIs Kinematic忽略物理引擎控制电梯、移动平台开启手动控制位置2D 移动平台、电梯开启代码控制位移2.5D 移动平台、斜视角电梯开启手动控制位移Freeze Position/Rotation冻结指定轴的移动 / 旋转门只绕 Y 轴转 → 冻结 X/Z 移动2D 门只绕 Z 轴转 → 冻结 X/Y 移动用3D刚体冻结Z轴移动/旋转用2D刚体无需额外冻结5. 避坑点控制带刚体的物体不要直接修改transform\.position会导致物理卡顿。3D用rigidbody\.AddForce\(\)或rigidbody\.MovePosition\(\)2D用rigidbody2D\.AddForce\(\)或rigidbody2D\.MovePosition\(\)2.5D用3D刚体则同3D方法用2D刚体则同2D方法2D 刚体的gravityScale可以精细调节重力比 3D 的Use Gravity更灵活。2.5D 场景用3D刚体时若未冻结Z轴物体易出现“穿模”“偏离视角”问题需重点检查冻结设置。三、角色控制器CharacterController / CharacterController2D1. 核心作用专门用于玩家角色的精准移动控制兼顾碰撞检测完全由代码驱动不受物理引擎影响2D 无官方组件需手动实现或用第三方插件2.5D 优先适配3D角色控制器也可自定义实现。2. 2D/3D/2.5D 组件区分与使用维度组件类型核心特点移动方法3D官方CharacterController内置爬坡slopeLimit、上台阶stepOffset功能Move\(\)/SimpleMove\(\)2D无官方组件可选方案1. 自定义Rigidbody2D \ Collider2D实现 2. 第三方插件如2D Character Controller需手动处理坡度、台阶控制更灵活代码控制Rigidbody2D\.velocity实现移动2.5D伪3D优先用官方CharacterController3D也可自定义Rigidbody \ Collider实现用3D角色控制器需锁定Z轴自定义方案可灵活适配斜视角移动用3D角色控制器Move\(\)自定义方案rigidbody\.MovePosition\(\)3. 使用时机维度适用场景3D玩家控制的人形角色RPG 主角、FPS 玩家、需要平滑爬坡 / 上台阶的角色、不需要复杂物理的角色不会被击飞2D2D 平台跳跃角色、横版闯关主角、2D 卷轴游戏角色2.5D伪3D斜视角 RPG 主角、2.5D 动作角色、伪3D 闯关角色如老式街机斜视角游戏4. 注意事项3D CharacterController不需要搭配Rigidbody加了会冲突。无内置重力跳跃 / 掉落逻辑需手动编写。碰撞检测使用OnControllerColliderHit方法替代OnCollisionEnter。2D 角色移动自定义方案用Rigidbody2DBoxCollider2D组合推荐设置Rigidbody2D\.bodyType Kinematic或Dynamic。手动控制velocity实现移动避免直接修改transform\.position。爬坡和台阶需通过代码判断碰撞角度、高度来实现。2.5D 角色移动优先3D角色控制器方案用3DCharacterController时需锁定Z轴移动/旋转避免角色偏离2.5D视角平面。无需搭配刚体手动编写重力和移动逻辑适配斜视角的X/Y轴移动如斜45度视角的前后左右移动。若用自定义方案Rigidbody \ Collider需冻结Z轴用AddForce控制移动兼顾碰撞检测。四、三者核心区别与选型决策1. 核心区别对比组件驱动方式适用维度核心特点碰撞体Collider/Collider2D无仅边界3D/2D/2.5D物理交互的基础必须搭配刚体或角色控制器使用静态物体除外2.5D需适配视角锁定Z轴刚体Rigidbody/Rigidbody2D物理引擎3D/2D/2.5D受重力、外力影响适合物理驱动的物体2.5D优先用3D刚体并冻结Z轴角色控制器CharacterController / 自定义 2D/2.5D 方案代码驱动3D/2D/2.5D精准控制角色移动适合玩家角色2.5D优先用3D角色控制器适配视角需求2. 快速选型步骤物体需要碰撞 / 触发→ 加对应维度的碰撞体2.5D优先3D碰撞体锁定Z轴。物体需要物理引擎驱动→ 加对应维度的刚体2.5D优先3D刚体冻结Z轴否则 → 下一步。物体是玩家角色3D → 用CharacterController2D → 用Rigidbody2D \ Collider2D自定义实现2.5D → 优先用CharacterController3D并锁定Z轴或自定义Rigidbody \ Collider实现五、典型场景组件搭配示例场景维度组件搭配静态墙 / 地面3DBoxCollider静态墙 / 地面2DBoxCollider2D2.5D 静态平台2.5DBoxCollider冻结Z轴掉落的木箱3DBoxColliderRigidbodyUse Gravity true2D 掉落的石块2DBoxCollider2DRigidbody2DgravityScale 12.5D 掉落的道具2.5DBoxColliderRigidbodyUse Gravity true冻结Z轴3D 玩家角色3DCharacterController2D 平台跳跃角色2DBoxCollider2DRigidbody2DbodyType Dynamic2.5D 斜视角主角2.5DCharacterController冻结Z轴电梯3DBoxColliderRigidbodyIs Kinematic true2D 移动平台2DBoxCollider2DRigidbody2DIs Kinematic true2.5D 移动平台2.5DBoxColliderRigidbodyIs Kinematic true冻结Z轴道具拾取区3DSphereColliderIs Trigger true2D 道具拾取区2DCircleCollider2DIs Trigger true2.5D 道具拾取区2.5DSphereColliderIs Trigger true冻结Z轴

更多文章