관리 메뉴

Unwound Developer

유니티 - 닷지 플레이어 생성 본문

Unity/Unity, C#

유니티 - 닷지 플레이어 생성

unwind 2022. 1. 7. 16:08
반응형

우선, 제가 유니티를 현재 공부할때 사용하는 책은 '레트로의 유니티 게임 프로그래밍 에센스'입니다.

왠지 말 안하면 저작권같은거 걸릴까봐..

 

책 전반부에 있는 C# 프로그래밍이나, 유니티 UI사용 같은 것들은 빠르게 넘어가고, 1권 후반부에 있는

간단한 프로젝트를 진행하며 유니티를 공부하게 되었어요.

 

책에서 첫번째로 진행한 프로젝트는 '닷지'게임 입니다.

그냥 맵에서 자동으로 생성되는 총알을 피하는 게임인데, 다행히 구현이 어렵진 않더라구요.


우선, 플레이어를 생성할 때 당연히 물리적인 것들이 적용되어야 하니까 Rigidbody 컴포넌트를 추가했어요.

Rigidbody 컴포넌트

플레이어야 그냥 3D object 아무거나 추가해서 만들었는데, 여기서 봐야할 부분 중 첫번째는 Freeze 관련된거겠네요.

우리가 플레이어를 조종할 때, 얘가 아무렇게나 막 굴러다니는게 아니라 보통 서서 움직이잖아요.

capsule 오브젝트

얘가 그냥 Rigidbody만 적용시켜놓으면 제멋대로 굴러다니는데 그걸 방지하는게 Freeze에요.

Freeze Position은 해당 오브젝트의 축(위치)를 고정시키고, Rotation은 회전을 고정시켜요.

Position에서 Y축을 고정시켰으니, 수직으로 움직이지 않고,

Rotation에서 X와 Z를 고정시켰으니 빙글빙글 회전하질 않습니다.

 

그럼 키보드로 움직이는 걸 구현해야겠네요.

프로젝트 창에서 C# Script를 추가해요.

그리고 비주얼 스튜디오로 실행시키면, C++이나 자바랑 비슷하게 생긴애들이 나와요.

 

자동으로 생성되는 메소드 두 개가 보이는데,

start() 메소드는 스크립트가 실행될 때, 한 번만 실행된대요. 생성자 함수같이요.

update() 메소드는 프레임 당 한 번 실행된대요. 60FPS라면 1초에 60번.

 

Rigidbody 객체를 생성해주고, GetComponent<Rigidbody>() (<>는 객체지향에서 쓰던 제네릭 이네요)를 객체에 넣어주면,

Rigidbody 객체를 이용해서, Rigidbody 컴포넌트의 속성같은걸 사용, 변경할 수 있어요.

speed는 플레이어의 움직임과 속도를 구현하기 위해 선언한 변수 입니다.

Input.GetAxis("Horizontal") 이건 쉽게 대충생각해서 x축의 입력을 받아오는 메소드에요.

GetAxis뒤에 넘겨주는 문자열에 따라서, 어떤 축의 입력을 받아올지 정하는거죠.

 

xInput의 경우에, 키보드 오른쪽 방향키를 누르면 1이 반환되고, 왼쪽은 -1이 반환됩니다.

그래서 밑에 speed와 곱해주면, 입력이 없다면 xSpeed가 0이되고, 입력이 있었다면 8 혹은 -8이 돼요.

 

조이스틱 같은것도 입력을 받아오는 것이 가능한대요. 근데, 조이스틱을 사용하지 않으니 패스

 

Vector3 객체를 생성해서 x,y,z값을 넘겨주면 넘겨준 값 만큼 객체에 움직임을 구현해주는 속성을 주나봐요.

그래서, 아까 생성한 Rigidbody객체에 Vector3 객체를 할당해주면, 이 Rigidbody객체는 키보드 입력에 따라서

움직임을 구현해주는 속성을 가지게 된거에요.

 

Die 메소드는 이 스크립트가 들어간 오브젝트의 SetAcitve에 false를 넘겨주면서, 오브젝트를 비활성화해요.

플레이어가 죽는 걸 구현하기 위해 있는거에요.

이제 이 스크립트를 저장하고 유니티로 돌아가서, 플레이어 오브젝트에 스크립트를 배정해주면 됩니다.

 

PlayerControl 스크립트

얘를 플레이어 오브젝트로 드래그 드롭하면 적용이 됩니다.

그럼 이제, 실행시켜보면 플레이어 오브젝트가 키보드 입력에 따라 움직이는 것을 확인할 수 있어요.

반응형