Advertisement
Unain

FPS Movement Component

Feb 6th, 2024
1,077
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
GDScript 1.35 KB | Source Code | 0 0
  1. extends Node
  2.  
  3.  
  4. @export_subgroup("Nodes")
  5. @export var character: CharacterBody3D
  6.  
  7. @export_subgroup("Settings")
  8. @export var speed: float = 10.0
  9. @export var ground_accel_speed: float = 1.0
  10. @export var ground_decel_speed: float = 0.65
  11. @export var air_accel_speed: float = 0.4
  12. @export var air_decel_speed: float = 0.25
  13.  
  14. var input: Vector3 = Vector3.ZERO
  15.  
  16.  
  17. func handle_input() -> void:
  18.     var input_2d: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
  19.     input = Vector3(input_2d.x, 0, input_2d.y)
  20.  
  21.  
  22. # Only use delta with acceleration when adding to velocity
  23. func _physics_process(_delta: float) -> void:
  24.     handle_input()
  25.  
  26.     var movement_direction: Vector3 = (character.transform.basis * input).normalized()
  27.     var move_velocity: Vector2 = Vector2(movement_direction.x, movement_direction.z) * speed
  28.  
  29.     var velocity_change_speed: float = 0.0
  30.     if character.is_on_floor():
  31.         velocity_change_speed = ground_accel_speed if movement_direction else ground_decel_speed
  32.     else:
  33.         velocity_change_speed = air_accel_speed if movement_direction else air_decel_speed
  34.  
  35.     var old_velocity := Vector2(character.velocity.x, character.velocity.z)
  36.     var new_velocity := old_velocity.move_toward(move_velocity, velocity_change_speed)
  37.     character.velocity.x = new_velocity.x
  38.     character.velocity.z = new_velocity.y
  39.  
  40.     character.move_and_slide()
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement