Games/Godot Engine

#Chapter.14 - 단위벡터와 등속운동 & 등가속운동

Ermael Starius 2022. 6. 21. 18:28

 

 

단위벡터: 크기가 1이고 방향을 가진 기본벡터. ("법선벡터" 라고도 한다.)

 

[단위벡터: 벡터 V / 벡터 V의 크기]

 

모든 벡터는 "벡터의 정규화" 를 통해서 단위벡터가 될 수있다.

 

 


 

< 사용된 Key Word >

 

    「 input_vector =input_vector.normalized() 」 - 속도변수를 "단위벡터" 로 만들어준다. "벡터의 정규화".

 

「 등가속도 운동공식 」 - " 속도 = 초기속도 + 가속도 × 시간"

 

 


 

 

[등속운동]

 

 

#현재 노드의 타입을 상속받음.
extends KinematicBody2D


#속도변수 velocity 를 기본값으로 초기화시킴.
var velocity = Vector2.ZERO

 

#속력의 최댓값을 상수 100으로 고정시킴.
const MAX_SPEED = 100

 


#상하좌우 움직일 시, 속도 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  [등속운동]
      else:
            velocity = Vector2.ZERO


      #이동처리함수. 해당 파라미터의 입력값 만큼 이동시킴. 이때, 델타타임(Delta Time)과 최대 속력을 곱해준다.
      move_and_collide(velocity delta * MAX_SPEED)

 

 


 

 

[등가속운동]

 

 

#현재 노드의 타입을 상속받음.
extends KinematicBody2D


#속도변수 velocity 를 기본값으로 초기화시킴.
var velocity = Vector2.ZERO

 

#속력의 최댓값을 상수 100으로 고정시킴.
const MAX_SPEED = 100

 

#초기 가속도의 값을 상수 400으로 설정.
const ACCELERATION = 400


#상하좌우 움직일 시, 속도 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  [등가속운동]
      else:
            velocity = Vector2.ZERO


      #이동처리함수. 해당 파라미터의 입력값 만큼 이동시킴. 이때, 델타타임(Delta Time)과 최대 속력을 곱해준다.
      move_and_collide(velocity delta)