Unity 3D Collider
유니티 3D에서 Collider 의 기능 및 설정
유니티 3D 는 게임 오브젝트 간의 충돌을 감지하기 위한 방법으로 오브젝트를 안에 두고 감싸는 경계를 설정하는 방법을 사용하는데 설정된 경계 안으로 다른 오브젝트가 들어 오면 충돌로 간주하게 된다. 이 때 오브젝트의 경계를 설정하는 콤포넌트를 Collider 라고 한다.
만약 게임 오브젝트에 Collider 콤포넌트가 설정되어 있지 않은 상태에서 중력의 효과를 받고 있다면 어떻게 될까?
중력의 효과로 게임 오브젝트는 지면이나 다른 오브젝트에 충돌할 때까지 아래로 추락하게 될 것이다. 그러나 Collider가 설정되지 않은 상태라면 지면이나 다른 오브젝트와의 충돌을 감지하지 못하기 때문에 지면이나 다른 오브젝트를 관통하여 끝 없이 아래 쪽으로 사라져 가는 상태가 될 것이다.
아래의 그림과 같이 프로젝트를 새로 생성하고 GameObject > Create Other > Plane 항목을 선택하여 Scene 뷰에 평면을 한개 추가하고 Hierarchy 뷰에 등록된 Plane 을 선택하면 Inspector 뷰에는 해당 오브젝트에 이미 설정된 Component 가 4개나 된다는 것을 보여주는데 그 중에 3번째 콤포넌트가 Mesh Collider 라는 이름을 가지고 있다. 그러므로 Plane 의 경계는 Mesh Collider가 지키고 있는 셈인데 그래서 다른 오브젝트가 관통해서 지나가지 못하게 되는 것이다
Collider 의 크기 조정하기
위의 평면 위에 Cube 를 하나 생성하여 올려 놓고 Hierarchy 뷰에서 Cube 를 선택하고 Inspector 뷰를 보면 Cube 에도 Collider 가 이미 설정되어 있는데 그 이름이 Mesh Collider가 아니라 Box Collider 라는 것을 알 수 있다. Collider의 크기도 편집이 가능하기 때문에 X 축 방향 크기를 아래 그림처럼 3.3 으로 늘려보면 Scene 뷰에서는 오브젝트 주위에 있던 초록색 경계박스가 X축 방향으로 확대되는 것을 볼 수 있다. 오브젝트의 모양과 크기가 Collider와 일치하는 경우가 가장 이상적이겠지만 Collider가 간단할수록 성능에는 유리할 것이다.
다시 Collider 의 X축 방향 크기를 1로 복귀하고 큐브에 중력을 적용하고 Play 버튼을 눌러보면 실행시에도 큐브는 여전히 그 자리에 있을 것이다.
큐브에 중력을 적용하려면 큐브를 선택하고 Component > Physics > RigidBody 항목을 선택하면 된다.
큐브에 중력을 설정한 상태에서 Play 버튼을 눌러 테스트해보면 큐브는 그 자리에 그대로 있는 것을 확인할 수 있다. 만약 큐브에 Collider 가 설정되어 있지 않은 상태라면 큐브가 평면과의 충돌을 감지하지 못하기 때문에 큐브가 아래로 사라져 보이지 않게 될 것이다
이번에는 큐브에 설정된 Box Collider 를 제거한 상태에서 Play 모드를 확인해 보면 아래의 그림처럼 큐브가 평면을 관통해 아래로 사라져 버렸기 때문에 평면 위에는 큐브가 보이지 않게 된다.
아래의 그림처럼 Collider 가 제거된 큐브는 중력의 효과로 Plane 을 관통하여 아래로 사라져 보이지 않게 되었다.
이제 다시 큐브에 Collider 를 설정하여 큐브와 평면이 충돌을 감지하고 서로 관통하여 지나가지 못하도록 해보자.
큐브에 가장 적합한 Collider는 Box Collider 이므로 아래와 같은 절차로 큐브에 설정해준다
Collider 를 설정하고 Play 모드에서 테스트해 보면 Collider 때문에 큐브가 평면을 관통하지 못하므로 실행시에도 큐브는 제자리에 있게 된다.
이번에는 FBX 포맷으로 만들어진 대포 3D모델을 Asset 으로 등록하고 Collider 를 설정하는 예를 보려고 한다.
유니티 3D는 다양한 3D 모델 포맷(3DS, OBJ, DAE, FBX 등)을 지원하는데 내부에서 FBX 포맷으로 변환하여 사용된다.
인터넷 상에서 오픈소스로 배포되는 대포 모델을 Asset 으로 임포트하고 Scene 뷰에 올려 놓으면 해당 모델은 Collider 가 설정되지 않은 상태이기 때문에 중력을 적용하면 Play 모드에서 Plane 오브젝트를 관통하여 아래로 사라져버릴 것이다.
Project 뷰의 Assets 폴더 위에서 마우스 우측을 누르고 Import New Assets... 을 선택한 다음 cannon.fbx 파일을 선택하고 Import 버튼을 누르면 다음 그림처럼 대포 모델이 프로젝트로 들어오게 된다. Project 뷰에 Asset 으로 등록된 대포 모델을 Scene 뷰로 드래그하여 올린다.
Hierarchy 뷰에 등록된 대포 모델을 선택하고 Inspector 뷰를 보면 Collider와 RigidBody 콤포넌트가 없는 상태이다. 이처럼 외부에서 작성된 3D 모델을 유니티로 임포트하면 필요한 콤포넌트를 개발자가 직접 설정해 주어야 한다.
우선 대포 모델을 위한 Collider 를 설정하자면 대포는 앞뒤로 긴 물체이기 때문에 Box Collider 나 Capsule Collider 가 적절할 것 같은데 앞서서 Box Collider 는 살펴봤기 때문에 여기서는 Capsule Collider를 설정하기로 한다.
Collider가 생성되면 대포 모델에 비해서 그 크기가 지나치게 크고 위치나 방향 그리고 폭도 어울리지 않게 되어 있으므로 아래 그림처럼 이들 정보를 적절하게 조절해야 한다. Collider의 경계는 Scene 뷰에서 초록색 선으로 표시되기 때문에 이들 정보를 조절할 때 Scene 뷰를 참조하면서 Inspector 뷰에서 마우스로 해당항목을 드래그하거나 수치를 직접 입력하면 된다.
다음은 대포 모델에 RigidBody 콤포넌트를 설정하고 중력을 적용해본다
대포 모델을 선택하고 Component > Physics > RigidBody 항목을 선택하면 된다