AchMover
AchMover 是一个挂载后即可立即生效的 2D 角色移动组件。
它不使用 Rigidbody2D —— 自身的碰撞处理(Move-and-Slide)、重力、斜坡、台阶和地面吸附全部由它直接完成。
所需的组件仅有一个 CapsuleCollider2D,并且会被自动添加和管理。
使用方法
只需在角色 GameObject 上添加 Ach Mover 组件即可。
| 模式 | 操作 |
|---|---|
| Platformer | A / D 左右移动,Space / W / ↑ 跳跃 |
| TopDown | WASD / 方向键 上下左右移动 |
完全支持 New Input System —— 即使在 Player Settings 中切换为 Input System Package,也会自动通过
Keyboard.current/Gamepad.current路径工作。
如果同一 GameObject 上存在
Rigidbody2D,它会与 transform 移动产生冲突,因此会被自动设置为simulated = false。
Inspector
Movement
| 字段 | 默认值 | 说明 |
|---|---|---|
MoveSpeed | 5 | 移动速度 (Units/sec) |
JumpForce | 12 | 跳跃力(仅 UseGravity = true 时有效) |
Mode | Platformer | Platformer / TopDown |
Physics
| 字段 | 默认值 | 说明 |
|---|---|---|
UseGravity | true | 是否启用重力和地面检测 |
GravityScale | 3 | 重力倍率 |
FallMultiplier | 2 | 下落时的额外重力倍率 —— 数值越高,手感越沉重 |
MaxFallSpeed | 20 | 最大下落速度 |
Slopes & Stairs
| 字段 | 默认值 | 说明 |
|---|---|---|
MaxSlopeAngle | 50° | 可攀爬的最大斜坡角度。超过该角度的表面会被视为墙壁,角色 会沿其滑落 |
StepHeight | 0.3 | 可自动登上的最大台阶/坎高度 (Units) |
Control
| 字段 | 默认值 | 说明 |
|---|---|---|
Movable | true | 若为 false 则屏蔽输入,只能通过代码控制 |
FlipSprite | true | 根据移动方向翻转 transform.localScale.x —— 子对象(武器、特效、命中框等)也会一同翻转 |
自有碰撞系统
AchMover 在每次 FixedUpdate 时执行以下流程。
- 速度计算 —— 综合输入、重力、跳跃,确定本帧的速度
- Move-and-Slide —— 使用
CapsuleCollider2D.Cast检测前进方向,然后沿碰撞表面滑动。最多迭代 4 次以处理拐角和多重表面 - 台阶自动攀登 —— 被墙壁挡住时,若坎高在
StepHeight以内则自动登上(向上抬起 → 横向移动 → 再向下落回) - 地面检测 —— 向碰撞体下方进行胶囊投射,若表面角度在
MaxSlopeAngle以下则视为 grounded - 地面吸附 —— 下斜坡时重新贴合表面,以免脱离地面
- 穿透修正 —— 最后检查残余重叠并将其推开