HOME / 第 6 部分 · 数据与进阶开发 / 第 77 课
MODULE 6 · 数据与进阶开发
第 77 课 · 输入进阶:手柄与触摸
🎯 本课学习目标
- 配置手柄输入
- 实现触摸屏幕控制
- 处理组合输入与手势
电脑游戏用键盘鼠标,但手柄与触屏是移动端/主机的必备。本课扩展输入能力。
📖 详细教学步骤
手柄输入映射操作
- 项目设置 → 输入映射
- 给动作添加事件 → 选「手柄按钮(Joypad Button)」或「手柄轴(Joypad Axis)」
- 手柄插上后在输入窗口按对应键即可绑定
- 轴(摇杆)用于模拟量控制(如行走速度)
💡 常用映射:A=跳跃、十字键=移动、RB=攻击。
读取摇杆(模拟量)代码
摇杆返回 -1 到 1 的连续值:
GDSCRIPTfunc _physics_process(delta):
# 读取左摇杆 XY 轴
var joy_x = Input.get_joy_axis(0, JOY_AXIS_LEFT_X)
var joy_y = Input.get_joy_axis(0, JOY_AXIS_LEFT_Y)
var dir = Vector2(joy_x, joy_y)
# 死区处理:避免摇杆不回中
if dir.length() < 0.2:
dir = Vector2.ZERO
else:
dir = dir.normalized()
velocity = dir * speed
move_and_slide()
震动反馈代码
受击/爆炸时手柄震动:
GDSCRIPTfunc rumble(strength: float = 0.5, duration: float = 0.3):
Input.start_joy_vibration(0, strength, strength, duration)
触摸输入代码
移动端:手指触摸控制(虚拟摇杆/按钮):
GDSCRIPTfunc _unhandled_input(event):
if event is InputEventScreenTouch:
if event.pressed:
print("手指按下位置:", event.position)
else:
print("手指抬起")
if event is InputEventScreenDrag:
print("手指拖动:", event.position)
虚拟摇杆 UI实操
移动端常见控制:屏幕左侧虚拟摇杆。
- 做 TouchScreenButton 或自绘虚拟摇杆
- 拖动时把偏移量转成方向向量
- 把方向传给角色移动
💡 Godot 有 VirtualJoystick 插件可搜;先理解原理即可。
统一输入处理(重要)重点
别在代码里写死键盘,统一用动作名:
GDSCRIPT# 键盘/手柄都映射到同一动作,代码只读动作
if Input.is_action_just_pressed("jump"):
jump()
# 这样键盘(空格)和手柄(A)都能跳跃,无需改代码
组合输入进阶
组合键(Shift+攻击=重击):
GDSCRIPTfunc _process(delta):
if Input.is_action_pressed("attack") and Input.is_action_pressed("sprint"):
heavy_attack()
elif Input.is_action_just_pressed("attack"):
normal_attack()
⚠️
手柄没反应?
确认手柄已连接、输入映射已绑定、用了正确的轴/按钮常量。
⚠️
摇杆不动但角色乱动?
摇杆死区太小导致漂移。设置死区(< 0.2 归零)。
🧪 动手试一试
🏋️ 课后练习
给平台跳跃游戏加手柄支持:A 跳跃、摇杆移动(带死区),受击时手柄震动 0.3 秒。
输入映射加手柄事件 + 摇杆死区 + start_joy_vibration。
💡
坚持「动作名」抽象输入,一份代码兼容键鼠/手柄/触屏。
💡
摇杆死区 0.1-0.2 是常见标准,按手感调。
🎓 本课小结
输入进阶:手柄映射 + 摇杆模拟量(死区)+ 震动反馈;触摸事件与虚拟摇杆适配移动端;统一用动作名实现多设备兼容。