본문 바로가기

유니티 ML Agents/유니티 기초

3. 유니티 Roll A Ball 기본 객체 만들기

플레인(Plane) 만들기


플레인(Plane) 만들기


먼저 편평한 바닥 모양을 한 플레인 객체를 추가해 보자. 플레인 객체는 모양에서 알 수 있듯이 게임에서 바닥의 역할을 한다. 플레인을 만들어 놓고 바닥으로 활용해서 공이 튀기거나 자동차가 움직이는 기반이 되는 바닥으로 사용한다. 객체를 추가할 때는 보통 계층 뷰에서 시작한다. 계층 뷰에서 마우스 오른쪽 버튼을 클릭해서 3D Object를 선택하고 그 중에서 Plane을 클릭한다. 3D 객체는 3차원 이기 때문에 x, y, z로 좌표가 결정되지만 플레인은 편평하기 때문에 y 좌표가 존재하지 않고 x,z 만 가지고 표현한다. 플레인은 또한 10단위 길이로 표현 된다.


플레인 이름 바꾸기


플레인 객채의 이름을 바꿔보자. 유니티에서 일반적으로 계층 뷰나 씬 뷰에서 객체를 선택하면 우측 인스펙터 뷰에 선택한 객체의 속성이 나온다. 인스펙터 뷰의 맨 위에는 객체의 이름이 나오고 이름을 클릭해서 다른 이름을 집어 넣으면 쉽게 변경할 수 있다.


조작 도구 배우기


플레인을 변경하기 전에 먼저 조작 도구의 기능에 대해 알아보자. 손 도구는 프로그래머가 바라보는 객체의 위치 만 변경한다. 손 도구로 씬 뷰를 이동해도 객체의 속성은 변하지 않고 단지 프로그래머가 바라보는 표시 위치 만 변경 된다. 이동 도구는 객체의 위치 만 변경 된다. 객체의 크기와 객체의 방향은 변경할 수 없다. 회전 도구는 객체의 방향만 변경할 수 있고 스케일 도구는 객체의 크기만 변경할 수 있다. 사각형 도구는 이동 도구와 스케일 도구 기능을 합쳐 놓을 것으로 객체의 위치와 크기를 동시에 변경할 수 있다. 만능 도구는 객체의 위치와 크기 그리고 방향도 변경할 수 있는 다양한 기능을 제공하지만 객체를 제어하기가 힘들기 때문에 숙련자가 아니고는 잘 사용하지 않는 도구이다.


조작 도구와 플레인


조작 도구에서 이동 도구를 선택한 다음에 Z 축을 선택해서 앞쪽으로 쭉 끌어 당겨보자. 인스펙터 뷰에 있는 Position 속성에서 Z 항목이 0에서 2.23으로 바뀐 것을 확인할 수 있다. 이렇게 손 도구, 회전 도구, 사각형 도구, 만능 도구를 선택해서 하나씩 조작하면서 인스펙터 뷰에 있는 Transform 항목 속성이 어떻게 변하는지 관찰해 보자. 그러면 각각의 조작 도구가 어떻게 사용되는지 쉽게 이해할 수 있다.


플레인 속성 초기화


변경된 속성은 맨 우측에 있는 톱니바퀴 버튼을 클릭해서 Reset을 선택하면 초기화 할 수 있다. 오브젝트 위치를 변경하다 보면 초기화가 필요한 경우가 자주 있다. 그 때 Reset 기능을 사용해서 처음으로 돌아갈 수 있다. 마지막으로 평면의 크기를 2x1x2로 맞추도록 하자.


 구체(Sphere) 만들기

 

구체(Sphere)


이제 플레이어 역할을 할 구체를 추가해 보자. 계층 뷰에서 마우스 오른쪽 클릭해서 3D Object를 선택하고 Sphere를 클릭하면 구체를 추가할 수 있다. 이제 이름을 Player로 바꿔보자. 인스펙터 뷰에서 Transform 속성을 초기화(Reset)해서 구체 위치를 화면의 중앙으로 이동해 보자. Reset 기능을 누르면 Position Rotation이 모두 0으로 초기화되고, Scale 1로 초기화된다.


구체 위치 변경


구체를 처음으로 만들면 평면에서 반만 위로 나와 있는 것처럼 보인다. 구체의 초기 크기가 1x1x1 이고 Y좌표가 0이기 때문에 평면 위로 0.5 그리고 평면 아래로 0.5 정도 나와 있다. 이것을 보정하기 위해 Position 속성의 Y좌표를 0.5로 바꿔주면 구체가 평면 위로 올라오는 것을 확인할 수 있다.

 

 컴포넌트 및 콜라이더


컴포넌트 알아보기


유니티 게임 오브젝트는 컴포넌트로 구성된다. 구체(Sphere)를 생성하면 기본적으로 5가지 컴포넌트가 생성되는데 (1) 트렌스폼(Transform) 컴포넌트는 객체의 위치, 회전, 크기를 지정한다. (2) 메쉬 필터(Mesh Filter)객체에 대해서 알기 위해서는 먼저 매쉬에 대해 알아야 한다. 매쉬는 3D 컴퓨터 그래픽에서 객체의 외관을 구성하기 위한 점, , 면의 집합이다. 메쉬 필터는 유니티 에셋으로부터 메쉬 정보를 가져 오는 역할을 한다. (3) 메쉬 렌더러(Mesh Render)는 메쉬 정보를 가지고 화면에 표현한다. (4) 콜라이더(Collider)는 오브젝트의 물리 충돌 감지를 위한 형태를 정의하며 렌더링했을 때는 눈에 보이지 않는다. (4) 머티리얼(Material) 3D 객체의 표면 정보이며 물체의 재질을 나타낸다.


메쉬 필터 개념


인스펙터 뷰의 메쉬 필터 컴포넌트 우측 하단에 보면 조그마한 원형 아이콘이 있는데 이것을 누르면 사용할 수 있는 다양한 메쉬 필터를 확인할 수 있다. 현제 구체 메쉬 필터가 적용되어 있고 적용된 부분은 파란색으로 표시할 수 있다. 메쉬 필터를 변경하고 싶다면 원하는 메쉬 필터를 선택하면 된다. 메쉬 필터가 변경되면 화면에 보여지는 객체의 모형이 바뀐다. 하지만 처음 객체를 생성할 때 구체를 선택했기 때문에 매쉬 필터를 제외한 다른 컴포넌트는 구체에 최적화되어 있다. 메쉬 필터는 가급적이면 객체를 생성할 때 사용한 필터를 사용하는 것이 좋다. 메쉬는 점, , 면으로 이루어진 뼈대만 정의하고 있다. 씬 뷰에서 보여지는 구체는 재질을 나타내는 머티리얼을 결합해서 메쉬 렌더러 컴포넌트가 화면에 표현하고 있는 것이다.


콜라이더 개념


콜라이더 컴포넌트는 생성하는 3D 객체에 따라 다른 종류가 생성된다. 예를 들어 구체(Sphere)는 스피어 콜라이더 컴포넌트가 생성되고 큐브(Cube)는 박스 콜라이더 컴포넌트가 생성된다. 콜라이더 컴포넌트 종류에 따라 다른 속성들을 가지고 있다. 생성한 구체 객체는 크기가 1X1X1이므로 반경은 0.5이다. 스피어 콜라이더의 Radius 속성이 0.5로 지정되어 있으므로 충돌 감지는 구체 표면에서 이루어 지게 된다. Radius 속성을 0.3 0.7로 변경했을 때 충돌 감지가 구체 내부에서 이루어 지거나 구체 외부에서 이루어지는 것을 확인할 수 있다.


○ 머티리얼(Material)


폴더 생성


게임을 개발하다 보면 다양하고 많은 에셋이 필요하다. 여러가지 에셋을 하나의 폴더에 생성하면 나중에 관리가 힘들어 지기 때문에 종류별로 별도의 폴더를 생성해서 에셋을 만드는 것이 좋다. 프로젝트 뷰에서 Assets를 선택하고 마우스 오른쪽 버튼을 클릭해서 Folder 메뉴를 통해 새로운 폴더를 만들어보자. 머티리얼이 저장되기 때문에 이름을 Materials로 변경하자.


머티리얼 생성


이제 머티리얼을 생성해보자. 프로젝트 뷰에서 머티리얼을 선택하고 마우스 오른쪽 버튼을 눌러 Create – Material 메뉴를 통해 새로운 머티리얼을 생성할 수 있다. 게임에는 모두 4개의 오브젝트가 있기 때문에 4개의 머티리얼은 생성한다.


머티리얼 속성 변경


머티리얼의 속성 중에 색을 변경해 보자. 프로젝트 뷰에서 머티리얼을 선택한 다음에 인스펙터 뷰에서 스포이드 아이콘 앞에 있는 사각형을 누르면 색을 선택할 수 있는 창이 뜬다. 알맞을 색을 고르면 머티리얼을 색을 변경할 수 있다. 머티리얼 4개 모두 동일한 방법으로 변경해 보자.


머티리얼 적용


게임 오브젝트에 머티리얼을 적용하는 것은 아주 쉽니다. 프로젝트 뷰에서 머리티얼을 선택하고 적용하고자하는 오브젝트에 드래그 앤 드랍하면 된다. 앞으로 만들어지는 나머지 오브젝트에도 동일한 방법으로 머티리얼을 적용해 보자.

 

 물리(Rigidbody) 컴포넌트


물리(Rigidbody) 컴포넌트 추가


현실 세계에 있는 공은 굴러가거나 위에서 아래로 떨어지는 물리적 특성을 가지고 있다. 유니티에서 구체 객체를 처음 생성하면 물체의 골격을 형성하는 메쉬, 표면을 만드는 머티리얼 그리고 충돌 감지 영역인 스피어로만 구성된다. 현실 세계의 공과 유사한 객체가 되기위해서는 여기에 물체가 외부 영향을 받았을 때 할 수 있는 동작과 물리적 특성이 추가 되야 한다. 물리적 특성을 표현하는 것이 리짓바디(RidgidBody) 컴포넌트이다.

물리 컴포넌트를 추가하기 전에 먼저 구체의 이름을 Player로 변경하자. 다음 Player 객체를 선택한 다음 인스펙터 뷰에서 Add Component 버턴을 클릭하자. 컴포넌트 선택 창에서 Physics를 클릭하고 다음으로 Rigidbody를 선택하면 된다.


물리(Rigidbody) 컴포넌트 속성


이제 추가된 리짓바디 컴포넌트의 속성을 간단히 살펴보자. Mass는 객체의 무게를 나타낸다. 디폴트 값은 키로그램이다. Drag는 객체가 움직일 때 받는 공기 저항을 나타낸다. 0이면 공기저항이 없는 것이고 무한대이면 공기저항 때문에 물체가 즉시 멈춘다. Angular Drag는 객체가 토크로 회전할 때 받는 공기 저항을 나타낸다. 0이면 물체가 계속 회전하기 때문에 주의 해야 한다. Use Gravity를 중력 속성을 사용할 경우 체크하고 그렇지 않을 경우 체크하지 않으면 된다. Collision Detection은 물체의 충돌을 체크하는 옵션이다. 일반적으로 Discrete 방식을 많이 사용한다.