본문 바로가기
컴퓨터·IT/<누구나 할 수 있는 유니티 2D 게임 제작>

08. 유니티로 플레이어 캐릭터 만들기

by BOOKCAST 2022. 11. 11.
반응형

 


 

씬에 배치한 캐릭터 이미지를 게임에서 조작할 수 있는 플레이어 캐릭터로 만들어봅시다.


이미지 에셋을 게임 캐릭터로 만들자

우선 플레이어 캐릭터를 만들고자 플레이어 캐릭터를 위한 애니메이션 패턴을 준비합니다.

대기

정지 상태입니다. 이동하지 않고 있을 때는 해당 이미지를 표시합니다. 

 



이동
이동 중 반복해서 움직이는 애니메이션입니다. 일곱 개의 이미지가 움직임으로 표현됩니다.

 


점프할 때
점프할 때의 패턴입니다. 두 개의 이미지로 움직임이 표현됩니다.

 


클리어
목적지에 도달했을 때의 패턴입니다. 이미지 하나로 만듭니다.

 


게임 오버
게임이 끝났을 때의 패턴입니다. 하나의 이미지로 표현했지만 스테이지에서 사라지는 효과를 스크립트로 추가합니다.

 




이미지에 피벗 설정하기

 


먼저 캐릭터 이미지에 피벗(pivot)을 설정합니다. 피벗은 이미지의 기준이 되는 점으로 일반적으로 이미지의 한가운데가 기준점입니다. 씬에 게임 오브젝트로 이미지를 배치하면 위치와 확대 및 축소, 회전 등의 변형을 시킬 때 피벗이 원점이 됩니다.

이번 예제에서는 이미지의 중앙 아래를 피벗으로 합니다. 즉 점프의 기준점을 발밑으로 하고자 캐릭터의 발밑을 기준점으로 합니다. 자세한 내용은 뒤에서 설명하겠습니다.

프로젝트 뷰의 이미지를 선택하면 인스펙터 뷰에 정보가 표시됩니다. Pivot의 풀다운 메뉴에서 ‘Bottom(가운데 아래)’을 선택합니다. [Apply] 버튼을 클릭하면 변경 사항이 반영됩니다.
모든 캐릭터 이미지에 피벗을 설정합니다.


TIP
피벗의 설정과 위치

일반적으로 게임 오브젝트의 원점인 피벗은 중앙에 있습니다. 게임 오브젝트는 원점을 기준으로 이동이나 변형이 실행됩니다.

예를 들어 그림과 같은 게임 오브젝트가 있습니다.

 


피벗은 Center(중앙)이므로 해당 게임 오브젝트를 두 배로 확대한 결과는 그림과 같습니다. 이미지의 중앙을 기준으로 확대돼 바닥 이미지를 뚫고 들어갑니다.

 


피벗을 Bottom(중앙 아래)으로 하고 게임 오브젝트를 두 배로 확대한 결과는 그림과 같습니다. 예시와 같이 지면에 서 있는 오브젝트를 확대하는 등의 상황에서는 피벗은 Bottom에 있는 편이, 회전 같은 동작은 Center가 더 좋습니다.

 


게임 오브젝트의 상황에 따라 적절하게 피벗을 설정합시다.


컴포넌트 추가하기

씬에 배치한 게임 캐릭터에 컴포넌트를 붙여 기능을 추가해봅시다. 이를 어태치(attach)라고 합니다. 컴포넌트는 게임 오브젝트에 여러 가지 기능을 추가하는 것을 뜻합니다. 이미지를 씬에 추가했을 때는 Transform과 Sprite Renderer라는 컴포넌트가 있었습니다. Transform과 Sprite Renderer는 유니티가 자동으로 어태치한 것입니다.

 




게임 오브젝트에 중력(Rigidbody 2D) 추가하기

사이드뷰 게임의 기반을 만듭니다. 사이드뷰 게임은 게임 속 세상을 옆에서 본 시점의 게임입니다. 캐릭터가 좌우로 달리는 런 게임이나 점프 액션 게임 등이 속합니다.

앞서 캐릭터 이미지를 씬에 배치해 게임 캐릭터를 만들었는데 화면에 그림이 붙어 있을 뿐인 상태입니다. 사이드뷰 게임의 캐릭터로 만들려면 먼저 아래쪽으로 중력이 작용하도록 합니다. 중력이 작용하게 하려면 어떻게 할까요? 유니티에는 중력을 발생시키는 컴포넌트가 있습니다.

중력을 발생하도록 하는 컴포넌트를 추가해봅시다. 캐릭터를 선택하고 인스펙터 뷰의 [Add Component] 버튼을 클릭합니다.

 



풀 다운 메뉴가 열리면 ‘Physics 2D’ 항목을 찾아서 클릭한 후 세부 메뉴 중 ‘Rigidbody 2D’를 선택합니다.

 



인스펙터 뷰에 Rigidbody 2D가 추가되었으며 이는 게임 오브젝트에 중력이 작용하도록 하기 위한 Rigidbody 2D 컴포넌트입니다. Rigidbody 2D 컴포넌트가 적용된 게임 오브젝트는 게임 안에서 물리 법칙을 따릅니다. 컴포넌트 왼쪽 상단에 위치한 [▼] 버튼을 클릭해 컴포넌트의 이름만 남기고 열거나 닫을 수 있습니다.

 


Rigidbody 2D 컴포넌트는 다음과 같은 속성parameter이 있습니다. 자주 사용되는 값을 알아보겠습니다.

Body Type
세 가지 종류가 있습니다. 값에 따라 다음과 같은 효과가 적용됩니다.
•Dynamic: 물리 시뮬레이션의 영향을 받아 동작하게 됩니다.
•Kinematic: 중력이나 외부 힘의 영향을 받지 않게 됩니다.
•Static: 물리 시뮬레이션의 영향을 받지 않게 됩니다.

물리 시뮬레이션
게임 안의 것을 컴퓨터가 계산해 현실의 것을 흉내 내 동작하도록 합니다. 낙하나 충돌 후의 움직임 등을 컴퓨터가 계산해 현실적으로 움직이게 합니다.

Material
물체의 재질material을 결정하는 컴포넌트를 설정하는 속성입니다. 다른 물체와 충돌했을 때 튕겨 나오는 상태나 두 물체가 닿았을 때 미끄러지는 상태를 설정할 수 있습니다.

Simulated
체크하면 물리 시뮬레이션을 유효하게 합니다.

Use Auto Mass
체크 박스를 설정하면 설정된 콜라이더collider(이후 설명할 ‘충돌 판정’을 설정)의 크기에 따라 물체의 질량을 자동으로 계산합니다.

Mass
물체의 질량을 설정합니다. ‘Use Auto Mass’가 설정돼 있으면 이 값을 설정할 수 없습니다.

Linear Drag
움직이는 물체가 어느 정도 시간 후에 멈출지 설정하는 값입니다. 수치가 클수록 이동하기 어렵고 멈추기 쉽습니다.

Angular Drag
회전하는 물체가 어느 정도 시간 후에 회전할지 설정하는 값입니다. 수치가 클수록 회전이 더디게 시작됩니다.

Gravity Scale
중력을 설정합니다. 1로 설정하면 ‘1G’, 즉 지구 표면과 같은 중력이 됩니다.

Collision Detection
충돌을 판정하는 방법을 설정합니다.
•Discrete: 물체가 빠른 속도로 움직일 경우 장애물과 겹쳐지거나 통과할 수 있습니다.
•Continuous: 캐릭터가 장애물과 겹치거나 통과하는 일 없이 처음 충돌한 물체와 접촉하게 됩니다.

Sleeping Mode
컴퓨터의 계산을 가볍게 하고자 일정 시간 움직이지 않는 물체는 휴식 상태가 되고 충돌 판정 등을 실행하지 않습니다. 이 값으로 휴식 상태를 설정할 수 있습니다.
•Never Sleep: 항상 물리 계산을 실행하는 상태로 큰 부담이 생길 수 있습니다.
•Start Awake: 초기 상태로 휴식 상태가 아닌 값으로 실행합니다.
•Start Sleep: 초깃값으로 물리 계산을 하지 않고 충돌 등에 의해 물리 계산이 시작됩니다.

Interpolate
물리 계산이 갱신될 때 동작 보간interpolation을 선택합니다.
•None: 보간하지 않습니다.
•Interpolate: 직전 프레임에 따라 동작을 보간합니다.
•Extrapolate: 다음 프레임에 따라 동작을 보간합니다.

Constraints
동작의 제한을 설정합니다.
•Freeze Position: X축과 Y축의 움직임을 제한합니다. 상하좌우로 움직이지 않습니다.
•Freeze Rotation: Z축을 기준으로 회전하지 않게 됩니다.


동작 확인하기

Rigidbody 2D가 적용된 상태에서 툴 바의 실행 버튼을 클릭하고 게임을 실행해봅시다. 캐릭터가 화면 아래로 떨어지면서 지금까지 움직임이 없었던 화면에 움직임이 생겼습니다.

 


캐릭터는 화면 아래로 떨어져 사라졌지만 없어진 것은 아닙니다. 계층 뷰에는 아직 Player가 있습니다. 계층 뷰에서 Player를 선택하고 인스펙터 뷰의 Transform을 보면 Position의 Y 값이 마이너스로 점점 커지는 것을 확인할 수 있습니다. Y 마이너스는 아래 방향입니다. 즉 캐릭터는 끝없이 아래로 계속 떨어지는 중입니다.


게임 오브젝트에 충돌 판정 적용하기

캐릭터가 지금처럼 떨어지기만 하면 게임이 성립되지 않습니다. 플레이어 캐릭터가 지면에 서 있을 수 있도록 충돌 판정을 추가합니다. 지면 이미지를 캐릭터의 아래에 오도록 배치합니다. 배치된 지면 오브젝트를 선택한 후 [Add Component] 버튼을 클릭합니다.

 


‘Physics 2D ➞ Box Collider 2D’를 선택합니다.

 

 

인스펙터 뷰에 Box Collider 2D가 추가됐습니다. Collider(콜라이더)는 게임 오브젝트에 물리적인 접촉이나 충돌 판정을 발생시키는 컴포넌트입니다. Box Collider 2D는 이름 그대로 사각형 상자 모양의 충돌 판정을 게임 오브젝트에 적용합니다.


TIP
충돌 판정과 콜라이더
게임 안에서 게임 오브젝트를 다른 게임 오브젝트에 접촉하려면 콜라이더 컴포넌트를 추가해야 합니다. 이후 소개하는 것처럼 콜라이더에는 원이나 타원, 사각형 등 여러 가지 모양이 있습니다. 콜라이더가 서로 충돌하면 충돌 판정이 실행됩니다. 게임에 부담이 될 수 있으니 게임 오브젝트를 어떻게 사용하는지에 따라 적절하게 모양을 설정합시다.


충돌 범위는 Edit Collider로 변경합니다. 충돌 판정을 나타내는 녹색 테두리에 사각형 모양의 핸들이 표시됩니다. 이것이 충돌 판정 범위입니다. 해당 핸들을 조작해 충돌 판정 범위를 변경할 수 있습니다.

 


낙하하는 캐릭터를 지면에 올리기 위해서는 캐릭터에도 충돌 판정을 추가해야 합니다. 지면에 한 것과 같은 방법으로 캐릭터에도 콜라이더를 추가합니다. 씬 뷰나 계층 뷰에서 Player를 선택하고 [Add Component]를 클릭합니다.

 


‘Physics 2D ➞ Capsule Collider 2D’를 선택합니다. 인스펙터 뷰에 Capsule Collider 2D가 추가된 것을 확인할 수 있습니다.

 


Edit Collider로 충돌 범위를 조정해 캐릭터의 크기에 맞춥니다. Capsule Collider 2D는 사각형의 모서리가 둥글게 된 캡슐 모양의 충돌 판정입니다. 모서리가 없어 어디에 걸리지 않아 이동하는 캐릭터에 적용하기 좋습니다.

 


이외에도 콜라이더는 ‘◯◯ Collider 2D’라는 이름으로 여러 가지가 있습니다. 예제에서 사용한 Box Collider나 Capsule Collider 외에 다른 콜라이더도 소개하겠습니다. 참고로 이름에 2D가 없는 콜라이더는 3D 게임용입니다. 2D에는 사용할 수 없습니다.


Circle Collider 2D
원형 충돌 판정을 추가합니다. 게임 오브젝트의 중심에서 반경으로 그려지는 원이 충돌 판정의 범위가 됩니다. 비교적 가벼운 충돌이기에 총알이나 대량의 적 캐릭터 등에 적합합니다.

 



Edge Collider 2D
라인을 당겨서 그리는 방식으로 만들어진 충돌 판정입니다. 비스듬한 언덕길이나 계단, 울퉁불퉁한 지형 등 어느 정도 복잡한 형태의 충돌 판정을 만드는 데 적합합니다. 어느 정도 부하가 생겨 너무 많이 쓰지 않는 것이 좋습니다.

 



Polygon Collider 2D
이미지의 불투명한 부분을 감싸듯이 다각형의 충돌 판정이 생깁니다. 상당히 정확하게 이미지를 감싸도록 만들어지지만 그만큼 게임에 부담이 커집니다.

 



게임 실행하기

툴 바의 실행 버튼을 클릭해 게임을 실행해봅시다. 낙하한 캐릭터가 바로 밑에 있는 지면에 서게 됩니다. 캐릭터와 지면에 충돌 판정이 부여된 것을 확인할 수 있습니다.

 


TIP
어태치한 컴포넌트 제거
어태치된 컴포넌트를 제거하려면 각 컴포넌트의 패널 오른쪽 위에 있는 메뉴 아이콘을 클릭해 ‘Remove Component’를 선택합니다.

 

반응형

댓글