Games/Godot Engine

#Chapter.15 - 운동저항과 움직임 제어

Ermael Starius 2022. 6. 21. 19:13

 

 

운동저항값: 오브젝트의 움직임을 멈추는데 필요한 저항값.

 

 


 

 

< 사용된 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 ACCELERATION800

 

#운동저항을 상수값 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)