Unity 교과서 따라하기 (2)

유니티 5 교과서 6.2 ~ 6.4

유니티 5 교과서 6.2와 6.3을 읽고 책에서 알려준대로 따라하였다. 우선 6.2에서는 새 프로젝트를 만들고 초기 설정을 진행하였고, 6.3에서 플레이어와 구름을 만들고 두 개의 오브젝트에 RigidBody와 Collider 속성을 부여하여 Physics를 사용해보았다.

6.2 프로젝트를 만들고 설정하기

6.2에서는 프로젝트를 설정하고 만드는 과정에 대한 소개가 있다.

  1. 유니티를 실행해서 새로운 프로젝트를 만든다.
    • 2D로 설정한 후 프로젝트명을 지정한다.
  2. 예제 소스에서 6장에서 사용되는 이미지 리소스들을 가져와서 생성한 프로젝트에 넣는다.
  3. 프로그램 메뉴에서 File - Build Setting을 클릭해서 게임 플랫폼을 안드로이드로 변경하였다. (Player Setting을 클릭해서 가로로 회전되지 않도록 하였고, 타겟 안드로이드 버전을 API 레벨 22로 설정하였다.)
  4. GameScene화면에서 기본 프리셋에서 세로로 긴 10:16 프리셋을 선택하였다.
  5. 이제 다음 내용으로 넘어간다.

6.3 Physics 배우기

물체에 작용하는 힘을 계산해주는 Rigidbody와 물체의 충돌 영역을 계산하는 Collider라는 유니티 물리엔진 요소를 사용해보았다. 우선 플레이어를 화면에 배치한 뒤 Rigidbody 2D 컴포넌트를 추가하여서 마치 중력을 받은듯이 움직이게 했고, 후에 충돌 처리를 위해서 Circle Collider 2D 컴포넌트도 추가하였다. 다음으로 장애물 역할을 하는 구름을 배치하였다. 구름에도 역시 Rigidbody 2D컴포넌트를 추가하였는데 이 때 BodyType을 Kinetic으로 설정하였다. 또 충돌 처리를 위해 Box Collider 2D도 추가하였다. Play버튼을 클릭하여 게임을 재생하니 플레이어가 떨어지다가 구름위에 잘 착지하는 것을 볼 수 있었다.

6.4 콜라이더 형태 연구하기

Collider를 그냥 사용하니 두 오브젝트 사이에 빈 공간이 생긴채로 동작한다. 그래서 더 자연스럽게 보일 수 있도록 각 오브젝트에 설정한 Collider를 수정하였다. 구름의 경우 플레이어가 구름 위에 착지한 것처럼 보일 수 있도록 경계를 이미지의 안쪽으로 살짝 포함시켰다. 그리고 플레이어에는 Circle Collider 2D를 캐릭터 발에서 다리 사이의 공간을 충돌범위로 설정하였고, 나머지 몸통부분은 Box Collider 2D를 추가한 후 두 Collider 요소의 크기를 수정하여 플레이어의 충돌 범위를 설정하였다. 여기에서 플레이어의 발쪽 경계가 둥글다보니 구름의 경계중 모퉁이와 부딪히니 캐릭터가 회전이 되었다. 책에서는 이 문제로 캐릭터가 회전되는 상황을 방지하기 위해서 플레이어의 Rigidbody 2DConstraint->Freeze Rotation "Z"에 체크하여 Z축으로의 회전을 막는 것으로 해결하였다.

감상

Rigidbody와 Collider를 사용해보았다. 내가 코드 한줄 작성하지 않고 설정만으로 잘 동작하니 편리하다. 예전 프로그래밍 수업시간에서 원 두개를 그리고 충돌하게 하는 과제가 있었는데 그때 충돌처리를 못해서 원 두개가 겹치거나, 화면상에서 원 끼리 부딪치기 직전에 튕겨져버리는 문제가 발생했던 기억이 떠올랐다. 아무튼 유니티에서 물리엔진을 사용한다면 2D이건 3D이건 두 컴포넌트는 핵심 요소라고 생각된다.

Written on March 6, 2018