Priv's Blog

캐릭터 움직임 구현 코드 응용 본문

Dev. Study Note/Unity

캐릭터 움직임 구현 코드 응용

Priv 2020. 2. 29. 21:38

키보드 조작으로 캐릭터 움직임 구현 시, horizontal과 vertical 변수를 이용하는 것이 가장 기초적인 방법이다.

Vector 변수를 2개 생성해 좀 더 코드를 간략하게 줄이는 방법이 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
 
 // Player Move
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
 
        Vector2 move = new Vector2(horizontal, vertical);
        Vector2 Position = rigidbody2D.position;
 
        //Position.x = (Position.x + Speed * horizontal * Time.deltaTime);
        //Position.y = (Position.y + Speed * vertical * Time.deltaTime);
 
        Position = Position + (move * Speed * Time.deltaTime);
        rigidbody2D.MovePosition(Position);
cs

 

일반적으로는 주석처리 되어 있는 Position.x와 Position.y 부분을 사용해 움직임을 구현하겠지만, 2줄로 구현한 코드를 Vector 2 move 함수를 추가해 1줄로 줄일 수 있음.

Vector 2 move 변수에 float 변수 (horizontal과 vertical)로 받아온 키보드 방향 값을 저장한다.

move 변수에 들어가는 값은 (1, 0) / (0, 1) / (-1, 0) / (0, -1) 등과 같이 방향을 나타내는 값만 저장될 뿐, 크기는 저장되지 않는다.
(즉, Max가 1, Min이 -1이다.)

move 변수에 들어간 값은 키보드 방향키 중 어디를 눌렀는가를 인지할 수 있도록 해주는 값이 된다.

Vector 2 Position 변수는 rigidbody2D.position의 값을 저장하므로, 게임오브젝트의 실질적인 현재 좌표 값이 저장된다.(rigidbody2D.position으로 한 이유는 transform.position으로 작성할 경우, 충돌 시 떨림 현상이 발생하기 때문.)

이제 Vector 2 Position 변수의 값을 바꿔 캐릭터를 움직이게 만들어야 한다.

Position + (move * Speed * Time.deltaTime) 식을 풀어보면,

현재 위치 값 + (이동해야 하는 방향 * 속도 * Time.deltaTime) 이 된다.

move 변수 값을 더하지 않고 곱하는 이유는 move 변수 값의 양수 또는 음수가 된다는 점을 이용해 캐릭터가 움직이는 방향을 인지하도록 만들어야 하기 때문.

rigidbody2D.MovePosition(Position); 은 말 그대로 Position으로 이동시키는 역할을 한다.

Comments