1

의식의 흐름대로 게임 만들기 1. 플레이어 이동

의식의 흐름대로 게임 만들기 1. 플레이어 이동

노아의 블로그

    목차
반응형

1. 이 페이지에서 배우는 내용

-Vector

-Time.deltatime

 

오랜만입니다. 이번부터는 유니티로 게임을 다시 만들어 보겠습니다.

 

저는 서바이벌 게임을 좋아하는지라 이번에도 역시 2d 서바이벌 게임을 만들어 봅시다.

 

Scene에 삼각형 하나를 배치하고 이놈을 플레이어라고 칭합시다.

 

일단 아무것도 없으니 wasd 조작을 통해서 플레이어가 상하좌우로 이동을 했으면 좋겠습니다. 

 

이동을 하려면 Vector에 대해서 알아야 합니다. 

 

2d 게임을 만드니까 2차원 백터를 사용합니다. x,y로 이루어져 있죠.

 

 

이 그림..!? 어디서 많이 보셨을겁니다.

학교에서 단골로 나오죠.  

 

플레이어는 현재 0,0에 위치하고 있습니다. 

 

이 플레이어를 x축으로 1만큼 이동하고 싶습니다.

 

transform의 position에서 x축을 1만큼 증가시키니 원점에서 오른쪽으로 한칸 움직이는것을 볼 수 있습니다..

 

2,2를 입력하니 이동합니다.

 

이제 우리는 이것을 코드로 해보고 싶습니다.

 

Start 함수는 실행시 한번만 불리는 함수입니다. 함수 안에 자신의 position을 10,10으로 이동합니다.

 

실행시 10,10으로 변경됩니다.

 

플레이어가 이동하였으나 우리가 원하는 결과는 아닙니다.

 

진짜 입력을 받아야겠죠

 

Update 함수는 Start와 달리 반복적으로 호출하는 함수입니다. 

 

키를 입력하는 행위는 게임 시작 후 에도 계속해서 눌렀는지 안눌렀는지 체크를 해야하죠.

따라서 Update함수를 사용합니다.

 

Input.GetKeyDown은

유니티에서 입력을 받는 함수입니다.

W 키를 눌르면 함수에서 true를 리턴해서 if안에 코드가 실행됩니다.

 

로그가 정상적으로 찍힙니다.

 

이제 위쪽 방향으로 이동을 해야합니다.

 

아까 전에 Vector을 이용해서 위치를 나타냈는데요.

 

Vector는 위치뿐만 아니라 회전,속력 등 다양한 표현을 할 수 있습니다.

Vector는 기본적으로 방향과 크기를 가집니다.

 

백터의 방향은 화살표로 나타내고 화살표의 길이는 백터의 크기입니다.

 

플레이어가 '위' 쪽으로 이동하려면 어떻게 해야할까요?

 

네. 위쪽으로 화살표를 그려야죠! (위쪽 백터를 만든다.) 그리고 그 화살표 방향으로 이동하면 되죠.

 

2차원에서 위쪽은 어디인가요? 네.. y이죠.. 즉 위쪽 방향 백터는 (0,1) 이 됩니다.

 

 

(기본적으로 transform.postion이 Vector3로 되어있어서 Vector3를 사용하였습니다.

하지만 Z축을 사용하지 않으니 괜찮습니다.)

 

이제 W키를 눌렀다면 자기 자신의 위치에서 Vector3.up 방향을 더한 위치를 다시 자기 자신의 위치로 설정해서

계속 위쪽 방향으로 이동하고 있습니다.

Vector3.up은 뭘까요

 

마우스를 가져가니 0,1,0 이 뜹니다.

즉 y만 1이니까 위쪽 방향을 표시하네요. 

 

한번 실행을 해 보면..

w 키를 눌렀을때 위쪽 방향으로 이동하네요.

 

하지만 w키를 꾹 누르면 플레이어가 엄청나게 빠른 속도로 슈웅~ 이동합니다.

 

밑에 로그를 보면 646번이나 찍혀있습니다. 

즉 위쪽 방향으로 646번을 이동했다는 소리입니다.

 

왜 이럴까요? 그것은 Update를 보면 알 수 있습니다. 

Update는 반복적으로 실행되는데 그 단위가 매우 빠릅니다. 1초에 60번 정도라고 하네요. 

 

저희는 1초에 한번만 위쪽 방향으로 움직이고 싶은데 그것은 어떻게 할까요?

count 변수를 만들어서 60번 새고 초기화 할까요? 그것은 아닙니다.

 

게임 하시면 FPS 아실겁니다.. 

컴퓨터에는 Frame 이라는것이 있습니다.

 

1초에 60번이니까

60프레임.

 

역으로 말하면 1번 실행하는데 ?초 가 걸리죠.

이 ?초는 이전 프레임에서 현재 프레임까지 걸린 시간을 의미합니다.

?초를 유니티에서는 Time.deltatime이라고 합니다.

 

그렇다면 Time.deltatime을 곱해준다면?

 

60번 실행되지만 위치 상으로는 1번 실행하는 효과를 볼 수 있겠죠!?!?!?

 

 

 

 Time.deltatime을 곱해주니 밑에 로그에서 672번 실행되었어도 위치는 4.35밖에 이동을 하지 않았습니다.

 

빠르게 이동을 하지 않으나 엄청 답답합니다.

왜냐하면 속력을 지정해주지 않았기 때문이죠...

(지금은 방향 * 시간입니다.. '속력' 이 없습니다.)

 

방향은 1이니까 결국에는 초당 1을 이동하는 1m/s 로 볼 수 있죠.

 

마지막으로 10을 곱해서 현재 위치에서 위쪽 방향으로 10m/s의 속력으로 이동합니다.

 

 

반응형