유니티

유니티 3D 간단한 RPG 게임 만들기 (2) - 유니티 기본적인 사용법

Voitcon 2023. 6. 3. 11:00

안녕하세요! 두번째 글로 찾아뵙게 되었습니다.

 

이번에는 유니티 엔진의 기본적인 사용법에 대해 알아보도록 합시다.

 

유니티 프로젝트 실행 모습

유니티 프로젝트를 만들고 저번 포스팅에서 끝냈는데, 막상 실행시키면 처음하시는분들은 뭘 만질지 잘 모르실 겁니다.

차근차근 하나하나 간단히 살펴보도록 하겠습니다.

게임의 scene 이다.

우선 scene 화면입니다. scene 화면은 한마디로 월드의 모습을 자신이 마음대로 볼 수 있습니다. 우측 상단엔 나침반 표시가 있는데, x , y , z 값으로 각각의 위치를 알려줍니다.

예를들어 자기가 ui를 짜고 ui 위치를 조정한다거나, 한 3D 물체를 생성했는데, 그 위치를 조정 한다거나 그럴때 이 scene 화면이 쓰이며, 오브젝트를 배치할때 주로 많이 사용됩니다.

게임화면이다.

게임화면은 게임을 실행하면 활성화 되는 화면입니다. 게임 화면은 하이라키 창에 있는 Main Camera 의 값 기준으로 보이게 됩니다.

가운데 위의 화살표가 게임 실행 버튼이다.
하이라키 창이다.

하이라키 창에는 현재 scene에 있는 오브젝트 목록들을 보여줍니다. 현재 따로 설정을 안해놓은 이상 3D에서는 Main Camera와 Directional Light인 빛 만이 오브젝트 목록에 있습니다.

 

하단의 프로젝트 폴더

프로젝트 폴더는 자기가 생성한 스크립트나, 애니메이션, 프리팹, 사운드와 같은 프로젝트 디렉토리 안에 있는 파일들을 표시해줍니다. 해당 화면에서 마우스 우클릭하면 탐색기로 가기가 있는데, 그걸 누르면 프로젝트 폴더로 갈 수 있습니다.

 

하이라키 창에서 마우스 우클릭 후에 3d objects -> cube를 생성해보자

하이라키 창에서 큐브를 생성해 봅시다.

큐브가 생성된모습.

큐브를 생성하고 나면 scene 화면에 큐브가 보이고 좌측 하이라키 창에 Cube 오브젝트가 생성된것을 볼 수 있습니다.

scene 화면에서 자세히 봐보자

좌측에 회전 도구 이러한것들이 있는데, 보통 단축키로 q, w, e, r 로 4가지 옵션을 선택할 수 있고

씬 화면에서 카메라 움직임은 w a s d , 마우스 우클릭, 마우스 휠 클릭으로 씬화면에서의 이동을 할 수 있습니다.

한번 엔진에서 직접 만져보시는것을 추천드립니다.

큐브의 인스펙터 창이다.

큐브의 인스펙터 창을 살펴봅시다.

인스펙터창에 있는 Transfrom,, Mesh Filter, Mesh Renderer, Box Collider 모두 큐브의 컴포넌트라고 불립니다.

우선 Transfrom입니다.

Transform은 모든 게임 오브젝트에 붙어 있는 컴포넌트 입니다.

트랜스폼은 물체의 크기, 위치 회전값을 조정할 수 있게 해주는 컴포넌트 입니다.

다음으로 Mesh Filter입니다. 

메쉬피터 우측에 동그라미 표시를 눌러보자

캡슐을 선택하면 4각형에서 갑자기 알약같은 캡슐로 바뀐것을 볼 수 있다. 틀을 결정하는 컴포넌트라고 간단히 알 수 있다.

mesh renderer값도 수정해보자

mesh renderer 값은 머티리얼 값 즉 물질을 결정시켜줍니다.

하얀색에서 이런 하늘과 같은 색으로 변한것을 볼 수 있습니다.

마지막으로 Box Collider입니다. 콜라이더에는 여러가지 종류가 있는데, 그 중 박스콜라이더는 박스모양의 콜라이더로 , 

예를 들어 총게임에서의 콜라이더는 주로 히트 박스의 역활을 수행합니다. 

만약 총알이 플레이어 콜라이더에 닿았다? 그럼 맞았다! 이런식으로 로직을 짜게됩니다.

인스펙터 창에서 컴포넌트 추가를 눌러 RigidBody를 추가해보자

큐브 인스펙터 창에서 컴포넌트 추가를 눌러 Rigidbody를 추가해봅시다.

 

리지드 바디를 추가하고 화살표 버튼의 play를 눌러 실행해보자

그럼 가만히 있던 큐브가 아래로 떨어지는것을 볼 수 있습니다.

Rigidbody는 오브젝트에 무게를 추가하여 중력을 사용할 수 있도록 하는 컴포넌트입니다.

플레이어 오브젝트에 주로 쓰이는 컴포넌트중 하나입니다.

스크립트를 생성해보자

이제 c# 스크립트를 생성해봅시다. 프로젝트 폴더에서 마우스 우클릭 후에 생성 -> c# 스크립트를 클릭해봅시다.

스크립트 이름은 F2 키를 누르고 수정을 해요

스크립트의 이름은 아무거나 원하시는 대로 하시면 됩니다. 저는 TEST라고 지었습니다.

처음 만나보는 유니티 C# 스크립트

스크립트를 생성하면 위의 모습이 보일텐데, 우선 스크립트 파일의 이름이 클래스 이름이됩니다. 그래서 나중에 스크립트의 이름을 바꾸고 싶으면 클래스 명도 바꿔줘야합니다.

test 옆에 : MonoBehaviour 가 있는데 콜론은 보통 상속자로 많이 사용하는데 MonoBehaviour를 간단하게 말하면 모노비헤이비어가 붙어 있으면 오브젝트의 컴포넌트에 스크립트를 붙일 수 있습니다. 만약 모노비헤이비어가 없으면 오브젝트의 컴포넌트에 스크립트를 넣지 못한다는 것입니다.

 

아래를 보면 void Start()가 있는데 start 함수는 게임이 시작되고 딱 한번만 실행되는 함수 입니다. 그래서 보통 start 함수 안에는 컴포넌트를 붙이거나 딱 한번만 실행되는 코드를 넣습니다.

 

void Update 함수는 매프레임 마다 실행되는 함수 입니다. update 문에 코드를 넣으면 매프레임마다 실행되는데, 예를 들어 계속 입력을 받아야하는 플레이어의 움직임이나, 총을 쏘는 그러한 행동들이 Update문에 들어갑니다.

 

스크립트를 한번작성해보자

스크립트를 직접 따라서 한번 쳐봅시다.

주석이 달려있으니 확인해보시길 바랍니다.

스크립트를 작성후 ctrl + s 나 ctl + shift + s 을 누르면 스크립트가 저장이 되고 엔진에서는 컴파일이 진행됩니다.

이제 스크립트를 추가해보자

큐브 인스펙터 창에서 컴포넌트 추가를 눌러 자기가 만든 스크립트의 이름을 검색해 추가하거나, 프로젝트 폴더에서 방금 생성한 스크립트를 끌어서 인스펙터 창에 넣으면 Test 스크립트에 The Cube Rigid 라는 항목이 추가된것을 볼 수 있습니다.

보통 변수를 public 으로 선언하거나 [SerializeField] 이거를 추가하면 인스펙터 창에 해당 변수가 표시되게 됩니다.

현재 저희는 public Rigidbody TheCubeRigid라고 하고 변수안에 아무것도 참조를 안해 없을 이라고 뜨는데, 하지만 저희는 start 함수에서 GetComponent로 큐브에 들어 있는 Rigidbody를 참조했고, Rigidbody 안에 중력 사용 즉 usegravity를 껐습니다. 한번 play 버튼을 눌러 실행해 봅시다.

게임 실행후 아까와 다르게 큐브가 가만히 있는다.

게임을 실행하면 usegravity가 꺼져 큐브가 떨어지지 않고 가만히 있고, test 스크립트의 TheCubeRigid에는 cube 의 rigidbody 컴포넌트가 추가된 것을 볼 수 있습니다.

 

감사합니다.

 

간단한 RPG 게임 시리즈 진행 예정

(1) 유니티 설치하기 -> (완료)

(2) 유니티 기본 사용법 -> (완료)

(3) 플레이어 생성 및 이동 -> (완료)

(4) 플레이어 애니메이션 및 무기 들기 -> (6월 14일)

(5) UI 다뤄보기 -> (6월 16일)

(6) 적 구현 -> (6월 19일)

(7) 스탯 구현 -> (6월 20일)

(8) 터레인 -> (6월 21일)

(9) 그래픽 및 메인화면 -> (6월 22일)