[Unity] Rigidbody와 Character Controller

도윤·2024년 1월 16일

Unity

목록 보기
2/4
post-thumbnail

유니티에서는 보통 Rigidbody 또는 Character Controller를 사용하여 캐릭터를 움직임을 제어할 수 있다.

이번에 개인프로젝트를 진행하며 Playable CharacterUnplayable Character가 공용으로 사용하는 Entity 구조를 제작 하던 도중, 캐릭터들의 움직임을 RigidbodyCharacter Controller 둘 중에 무엇으로 제어할지에 대한 고민이 생기게 되었다.

고민을 해결하기 위해 RigidbodyCharacter Controller의 차이점을 정확히하고, 어떤 상황에서 어떤 컴포넌트를 써야할지에 대해 공부하여보기로 하였다.

Rigidbody

RigidbodyGameObject물리를 적용시켜주는 컴포넌트이다.

사용자는 따로 물리를 구현하지 않고도, Rigidbody 를 사용하여 물체가 중력에 영향을 받게 하거나, 물체가 가속도 운동을 하는 등의 물리 작용을 할 수 있다.

장점

Rigidbody 의 가장 큰 장점은 물리를 구현하지 않아도 된다는 것이다.

유니티에서 Rigidbody 를 사용하지 않고, 가벼운 물체와 무거운 물체가 서로 충돌하였을 때 움직임을 직접 구현한다거나, 공을 튀기게 하는 등의 물리 움직임을 매끄럽게 구현하기 위해서는 시간이 오래걸리고 물리적, 수학적 지식을 요구한다.

자신이 직접 물리를 구현할 수 있다라고 하더라도, 게임 개발에서 중요한 것은 게임에 재미가 직접 드러나는 콘텐츠 개발이기에 이러한 물리를 직접 구현하는 것은 상당히 비효율적이다.

이런 점에서 물리를 구현하지 않아도 된다는 것은 크나큰 장점으로 다가온다.

단점

물론 Rigidbody 에도 단점은 존재한다.

아이러니한 말이지만, 물리를 직접 구현할 수 없다는 것Rigidbody 의 단점이다. 정확히 말하자면 Rigidoby 어디까지나 유니티에서 제공해주는 컴포넌트이기에 커스텀이 불가능하다. 따라서 내가 원하는 움직임을 디테일하게 조정하지 못하는 것은 단점으로 다가온다.

이러한 단점은 멀티 게임을 제작할 때에도 문제가 되는데, 내가 원하는 움직임으로 클라이언트간에 동기화를 하는 작업이 불가능하고 각각의 컴퓨터에서 연산이 진행되다보니, 모든 클라이언트가 다른 물리 동작을 실행할 가능성이 생기게된다.

또한, 물리 연산은 대부분 프로그램에 강한 부하를 일으키게 된다. 최적화 방법을 모른채 Rigidbody 를 마구잡이로 사용하게 된다면, 치명적인 문제가 생길 수 있다.

Character Controller

이름 그대로 Character Controller 는 유니티에서 제공하는 캐릭터를 컨트롤하기 위해 유니티에서 제공하는 컴포넌트이다.

Rigidbody 와 같은 물리적 기능 대신 경사면과의 상호작용 등 캐릭터를 컨트롤하는데에 필요한 기능을 사용할 수 있다.

장점

경사면과 계단을 오르내리는 행위는 구현하기에 다소 까다로운 부분이 있다. 이러한 부분을 따로 구현하지 않고도 사용할 수 있는 것은 개발 시간을 절약할 수 있고, 효율적이다.

물리적 기능을 경량화 하였기에 Rigidbody 의 단점으로 언급되었던 부분을 모두 장점으로 승화할 수 있다.

물리 연산이 비교적 적기에 Rigidbody 에 비해 성능적으로 유리하며, 내가 원하는대로 물리 기능을 개발하여 사용할 수 있기에 디테일한 움직임을 구현할 수 있고, 멀티게임을 만들때에도 동기화하기 원할하다.

단점

물리적 기능을 경량화 하였기에 Rigidbody 의 장점은 단점으로 오게 된다.

물리에 익숙하고, 게임에서 많은 물리를 사용하지 않는다면 문제없겠지만, 반대로 물리에 익숙하지 않고, 게임에서 많은 물리 연산을 사용한다면 물리 기능을 모두 구현하는데에는 한계가 있다.

물체가 벽을 뚫거나, 제대로 충돌 처리가 되지 않거나 하는 등의 예외처리를 모두 직접 구현해야하기에 상황에 따라서는 큰 단점이 될 수 있다.

결론

RigidbodyCharacter Controller 의 핵심 차이는 물리적 상호작용이 있느냐 없느냐이다.

따라서 자신이 개발하는 게임의 상황에 따라 물리적 상호작용이 많이 필요하다면 Rigidbody 를 사용하고, 물리적 상호작용이 많이 필요하지 않고 경사면, 계단등의 캐릭터 조작이 중요하다면 Character Controller 를 선택하는 것이 효율적이다.

이러한 방식으로 구분하여 사용하는 것이 좋지만, 어디까지나 참고사항일 뿐 어떤 컴포넌트를 사용하더라도 사용자가 원하는 모든 기능을 구현할 수 있다. 따라서 자신이 캐릭터를 구현하는데에 약점인 부분을 컴포넌트로 보완할 수 있도록 적절한 컴포넌트를 선택하는 것이 가장 좋은 방법인 것 같다.

profile
Game Client Developer

1개의 댓글

comment-user-thumbnail
2024년 1월 26일

좋은 정보 감사합니다.

답글 달기