Godot 4 入门(04):CharacterBody2D 实现八方向移动

一、配置输入动作

打开"项目设置 → 输入映射",创建 move_left、move_right、move_up、move_down,分别绑定 A/D/W/S 和方向键。代码只关心动作名,将来增加手柄无需重写移动逻辑。

把 Player 根节点类型更改为 CharacterBody2D,

同步修改脚本:

gdscript 复制代码
extends CharacterBody2D

@export var speed: float = 220.0

func _physics_process(_delta: float) -> void:
    var direction := Input.get_vector(
        "move_left", "move_right", "move_up", "move_down"
    )
    velocity = direction * speed
    move_and_slide()

Input.get_vector() 把四个动作合成 Vector2,并把长度限制在 1,因此同时按 W+D 不会比只按 D 更快。velocity 表示像素/秒,move_and_slide() 已按物理时间步处理位移,不要再给 velocity 乘 delta。

移动物理对象应放在 _physics_process(),它以固定物理频率运行;普通视觉效果更适合 _process()。

二、停止与移动

没有输入时 direction 为 (0, 0),velocity 也随之归零。若希望有加速和减速,可替换赋值:

gdscript 复制代码
velocity = velocity.move_toward(direction * speed, 1200.0 * _delta)
相关推荐
又过二十6 天前
结合Godot八向图实现网页角色设计器测试
ai·aigc·godot·game·qwen-image·游戏素材
chen_22711 天前
godot做仪表hmi
游戏引擎·godot
一只大鸽子14 天前
游戏开发笔记0-Godot启动
笔记·游戏引擎·godot
Oiiouui15 天前
Godot-GridGame架构DI容器全局联动设计
架构·游戏引擎·godot
wgslucky16 天前
Godot UI管理与使用
游戏引擎·godot
Oiiouui17 天前
Godot-GridGame架构屏幕UI层
架构·游戏引擎·godot
Oiiouui19 天前
Godot-GridGame架构逻辑层与实体/物品层篇
架构·游戏引擎·godot
坐吃山猪20 天前
Godot01-初体验
godot·1024程序员节
Oiiouui20 天前
针对Godot-GridGame(网格游戏)的DI注入+RefCounted数据驱动信号流架构设计的研究(全程开源)
游戏·游戏引擎·godot·1024程序员节
Oiiouui20 天前
Godot-GridGame架构数据层篇
架构·godot·1024程序员节