35 lines
910 B
GDScript
35 lines
910 B
GDScript
extends CharacterBody3D
|
|
|
|
var moveUtils = MoveUtils.new()
|
|
|
|
var fall_acceleration = 75
|
|
|
|
var target_velocity = Vector3.ZERO
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
|
|
target_velocity = moveUtils.get_horizontal_velocity(get_cmd_direction(), velocity, delta)
|
|
|
|
if target_velocity != Vector3.ZERO:
|
|
$pivot.basis = Basis.looking_at(target_velocity.normalized())
|
|
|
|
if !is_on_floor():
|
|
target_velocity.y = target_velocity.y - ( fall_acceleration * delta )
|
|
|
|
velocity = target_velocity
|
|
move_and_slide()
|
|
|
|
## 获取当前指令的关联向量[br]
|
|
## 难道需要两层才生效?
|
|
func get_cmd_direction() -> Vector3:
|
|
var vector := Vector3.ZERO
|
|
if Input.is_action_pressed("move_forward"):
|
|
vector.z -= 1
|
|
if Input.is_action_pressed("move_back"):
|
|
vector.z += 1
|
|
if Input.is_action_pressed("move_left"):
|
|
vector.x -= 1
|
|
if Input.is_action_pressed("move_right"):
|
|
vector.x += 1
|
|
return vector.normalized()
|