261 字
1 分钟
Godot-CharacterBody2D移动遇到的坑

在Godot中创建了一个Player场景,根节点是Character2D。
这是我Player的GD Script代码,实现了移动功能。
extends CharacterBody2D@export var speed : float = 10;func _ready() -> void: pass;func _physics_process(delta: float) -> void: var movespeed:float = speed; if Input.is_action_pressed('slow'):# 按shift降速 movespeed/=2; velocity=Input.get_vector("move_left","move_right","move_up","move_down"); position += velocity*movespeed;
乍一看没问题,但当我设置游戏边界的空气墙时,出问题了。
即使Player附有碰撞体节点,却不能被空气墙阻挡。
然后上网看到贴吧的一个大佬给出了回答:CharacterBody2D进行移动时,只有使用move_and_slide()
或者move_and_collide
方法才能进行碰撞检测
改正后的代码如下:
extends CharacterBody2D@export var speed : float = 10;func _ready() -> void: pass;func _physics_process(delta: float) -> void: var movespeed:float = speed; if Input.is_action_pressed('slow'):# 按shift降速 movespeed/=2; velocity=Input.get_vector("move_left","move_right","move_up","move_down")*movespeed; move_and_slide();
简单粗暴操作position和unity的transform.Translate
差不多,只会进行坐标系上的移动,并不会考虑到物理计算。
算是一个开发时的小坑
另外为啥我从Unity转到Godot了,因为我最近闲的蛋疼想找点乐子
Godot-CharacterBody2D移动遇到的坑
https://klqn.top/posts/cv0016/