Godot 4玩家移动脚本失效求助:代码无报错但无法运行
问题排查与修复方案
核心问题1:move_and_slide()调用位置错误
你的代码仅在无输入的else分支里调用move_and_slide(),导致角色移动时根本未执行核心移动逻辑。必须将move_and_slide()移到player_movement函数末尾,确保无论有无输入都执行移动操作。
核心问题2:play_anim函数未完成
当前函数仅获取了动画节点实例,但未实现实际的动画播放逻辑(虽不影响移动,但会导致动画失效),建议补充完整。
修复后的完整代码
extends CharacterBody2D const speed = 100 var current_dir = "none" func _physics_process(delta): player_movement(delta) func player_movement(delta): # 先重置速度,避免方向切换时残留速度 velocity = Vector2.Zero if Input.is_action_pressed("ui_right"): current_dir = "right" play_anim(1) velocity.x = speed elif Input.is_action_pressed("ui_left"): current_dir = "left" play_anim(1) velocity.x = -speed elif Input.is_action_pressed("ui_down"): current_dir = "down" play_anim(1) velocity.y = speed elif Input.is_action_pressed("ui_up"): current_dir = "up" play_anim(1) velocity.y = -speed else: play_anim(0) # 关键:无论是否有输入,都执行移动逻辑 move_and_slide() func play_anim(movement): var anim = $AnimatedSprite2D if movement == 1: # 请根据你的动画命名修改,比如"walk_right"、"walk_left"等 anim.play("walk_" + current_dir) else: # 对应修改为 idle 动画名称,比如"idle_right" anim.play("idle_" + current_dir)
额外检查项
- 确认
CharacterBody2D节点下存在AnimatedSprite2D子节点,路径$AnimatedSprite2D正确 - 检查项目设置的输入映射,确保
ui_right、ui_left等动作已绑定对应按键 - 确认角色场景已正确添加到主场景,无层级遮挡或节点配置错误
内容的提问来源于stack exchange,提问作者Boaz
相关产品推荐
相关产品推荐

