效果预览

1 添加人物碰撞
在play节点下新建一个collisionShape2D节点,选择shape添加碰撞检测的形状,这里添加椭圆形,并旋转90°(按自己喜好设置)

调整形状,把脚盖住
2 添加空气墙测试人物碰撞
添加StaticBody2D节点,和它的CollisionPolygon2D子节点,绘制墙体,在调试中把显示碰撞区域打开

3 处理挨着墙壁移动,角色会抖动的问题
使用move_and_slide()替换move_and_collide(velocity * delta)
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| extends CharacterBody2D
const ACCELERATION = 15 * 60 const MAX_SPEED = 100 const FRICTION = 10 * 60
var input_vector = Vector2.ZERO
func _physics_process(delta: float) -> void: # 更新输入向量(仅当输入发生变化时才重新计算归一化) input_vector.x=Input.get_axis("ui_left", "ui_right") input_vector.y=Input.get_axis("ui_up", "ui_down") if input_vector.length() > 0.01: # 防止除以零 input_vector = input_vector.normalized() #非零向量 if input_vector != Vector2.ZERO: velocity = velocity.move_toward(input_vector * MAX_SPEED,ACCELERATION * delta - FRICTION * delta) else : velocity = velocity.move_toward(Vector2.ZERO,FRICTION * delta) #摩擦力 #相比上1节,只变了这一行代码 move_and_slide()
|
完成