#Chapter.15 - 운동저항과 움직임 제어
운동저항값: 오브젝트의 움직임을 멈추는데 필요한 저항값.
< 사용된 Key Word >
「 const Friction = 200 」 - 운동저항 값을 상수 200으로 설정.
「 velocity.move_toward( 특정 벡터값 , 프레임당 델타타임값 ) 」 - 속도를 매 "프레임당 델타타임값" 만큼 "특정벡터" 에 수렴.
「 velocity = velocity.clamped(MAX_SPEED) 」 - 기본 속도는 상한선으로 MAX_SPEED를 넘지 않는다.
#현재 노드의 타입을 상속받음.
extends KinematicBody2D
#속도변수 velocity 를 기본값으로 초기화시킴.
var velocity = Vector2.ZERO
#속력의 최댓값을 상수 500으로 고정시킴.
const MAX_SPEED = 500
#초기 가속도의 값을 상수 800으로 설정.
const ACCELERATION = 800
#운동저항을 상수값 200으로 설정.
const Friction = 200
#상하좌우 움직일 시, 속도 3으로 움직임. 키입력 없을 시 정지상태.
func _physics_process(delta):
#새로운 속도변수 초기화.
var input_vector = Vector2.ZERO
#새로운 속도는 (오른쪽에서 왼쪽의 값을뺀 정도 / 아래에서 위를 뺀 정도) 이다.
input_vector.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
input_vector.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
#새로운 속도변수를 "단위벡터" 로 만들어 줌. "벡터의 정규화".
input_vector = input_vector.normalized()
#새로운 속도가 0이 아닐때 "기존속도 = 새로운속도" / 새로운 속도가 0일때 "기존속도 = 0".
if input_vector != Vector2.ZERO:
velocity += input_vector * ACCELERATION *delta [등가속운동]
#기존속도는 상한선으로 MAX_SPEED를 넘지 않는다.
velocity = velocity.clamped(MAX_SPEED)
else:
#기존속도는 매 프레임당 "Friction * delta" 만큼 0으로 수렴한다.
velocity = velocity.move_toward(Vector2.ZERO, Friction * delta)
#이동처리함수. 해당 파라미터의 입력값 만큼 이동시킴. 이때, 델타타임(Delta Time)과 최대 속력을 곱해준다.
move_and_collide(velocity * delta)