Godot-CharacterBody2D移动遇到的坑

13 小时前
5

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了,因为我最近闲的蛋疼想找点乐子

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...