输入系统与控制逻辑
🎯 学完你将掌握:
- 如何使用 Input Map 定义自定义动作
- 如何用 C# 处理玩家输入
- 如何实现角色:
- ✅ 左右移动
- ✅ 跳跃
- ✅ 冲刺(拓展)
- ✅ 攻击(拓展)
- 如何通过代码控制动画状态(基础)
1️⃣ 设置输入映射(Input Map)
打开:项目→项目设置→ 输入映射名称→绑定事件 依次添加这些自定义动作名:
动作名 | 推荐绑定键 |
---|---|
move_left | A / ← |
move_right | D / → |
jump | Space / ↑ / W |
attack | J / Ctrl |
sprint | Shift |
该页面按动键盘即可绑定
2️⃣ 角色节点结构(最小结构)
我们仅用 3 个节点 完成控制逻辑:
Main (Node2D) # 游戏主节点
├── Player (CharacterBody2D) # 玩家角色
│ ├── Sprite2D # 玩家外观图像
│ └── CollisionShape2D # 玩家碰撞体(矩形)
└── Ground (StaticBody2D) # 地面
└── CollisionShape2D # 地面碰撞体(WorldBoundaryShape2D)
🧱 节点说明
🟦 Player 角色
- 使用
CharacterBody2D
可实现自定义移动和重力控制 - 搭配
MoveAndSlide()
使用,支持:IsOnFloor()
落地检测Velocity
控制方向和速度
- 子节点:
Sprite2D
用于显示角色图像CollisionShape2D
使用RectangleShape2D
作为基础碰撞体
🟫 Ground 地面
- 使用
StaticBody2D
表示不可移动的地面 - 碰撞体选择
WorldBoundaryShape2D
,形成一条无限的水平边界线
✅ 使用
WorldBoundaryShape2D
可快速构建一个“无限延伸”的地面,非常适合角色在 X 轴上测试移动行为。只需将其挂载在StaticBody2D
的CollisionShape2D
上,并确保法线朝上(蓝色箭头朝上),角色即可稳定站立并自由行走,无需拼接平台。
💡 小提示:
WorldBoundaryShape2D
是无厚度的一维碰撞线,节省性能、适合测试- 法线方向朝上才能阻挡角色向下坠落
- 后期游戏中如需地形可见或有视觉表现,可替换为
TileMapLayer
+RectangleShape2D
3⃣ 创建 Player 脚本(使用模板推荐)
- 选中 Player 节点
- 点击“添加脚本”
- 选择:
- 语言:C#
- 继承:CharacterBody2D
- 模板:
CharacterBody2D: Basic Movement
📷 模板选择示意图: