캐릭터를 조작하려고 할 때 가장 고민인 것 중 하나가 캐릭터 컨트롤러를 사용할지, 리지드바디를 사용할지 입니다. 이번 시간에는 각각의 장단점을 알아보고 어느 상황에 어떤 것을 사용하면 좋을 지 정리를 해보겠습니다. 또한 둘 다 사용해본 경험을 공유해 보겠습니다.
목차
[리지드바디란?]
오브젝트의 물리적인 특성을 부여해 주는 컴포넌트입니다. 리지드바디를 사용하지 않고 공을 튀긴 다거나, 오브젝트의 가속도 등을 구현해 내려면 많은 시간과 지식이 드는데 이 컴포넌트 하나만으로 이러한 특성들을 부여해 주는 것 입니다.
[리지드바디 장점]
가장 큰 장점은 직접 물리를 구현하지 않고도 물리적 특성을 사용할 수 있다는 것 입니다. 또한 오브젝트 간 충돌 처리를 자연스럽게 해준 다는 것입니다. 자신 보다 가벼운 질량인 오브젝트와 충돌할 경우 더 적게 밀려 나가는 현상을 구현하려면 생각보다 오래 걸리기도 하며, 많은 지식을 요구 합니다.
유용한 옵션들이 많습니다. 중력을 활성화 또는 비활성화 해줄 수 있기도 하며, 질량 조절 같은 옵션들을 사용하여 원하는 기능을 만들 수 있게 해줍니다.
무기의 특성을 구현하기가 쉽습니다. 둔기로 몬스터를 공격 했을 때 밀리는 현상 즉, 넉백을 구현하려면 AddForce라는 함수를 사용해주면 손쉽게 구현이 됩니다.
핵심은 물리효과들을 손쉽게 이용 할 수 있기에 리지드바디를 사용합니다.
[리지드바디 단점]
성능 문제가 발생할 수 있습니다. 물리 연산은 성능의 무리를 주는 경우가 있습니다. 그렇기에 최적화 하는 방법을 모르고 막 사용 하다 간 치명적인 문제가 될 수 있습니다.
원하는 물리적 특성을 구현하기 어려울 수 있습니다. 유니티에서 제공해 주는 것 이므로 자신의 원하는 형태의 움직임 이나, 충돌 현상을 만들고 싶은데 내부를 수정할 수 없으니 어려움을 겪을 때가 있습니다.
멀티 게임을 만들 때 다른 결과를 발생 시킬 수 있습니다. 각각의 컴퓨터에서 연산을 처리하므로 서로 다른 결과를 낼 수 있습니다. 이를 동기화 하려면 많은 어려움이 있습니다. 물론 내부를 수정할 수 있다면 그 어려움이 덜 하겠지만 그게 아니기에 더 어렵습니다.
[캐릭터 컨트롤러란?]
캐릭터를 컨트롤하기 위해서 유니티에서 제공해 주는 컴포넌트 입니다. 물리적 특성이 경량화 되어 있고 경사면과의 상호작용이나 캐릭터 조작에 필요한 기능들이 포함 돼 있습니다.
[캐릭터 컨트롤러 장점]
- 경사면을 오르고 내려가는 행위와 계단을 오르고 내려가는 행위를 직접 구현하지 않아도 됩니다. 게임을 만들다 보면 계단과 경사면과의 상호작용은 구현하기 까다롭습니다. 이러한 기능이 구현 돼 있다는 것은 시간 절약에 많은 도움이 됩니다.
- 물리적 특성이 경량화 돼 있기에 리지드바디보다 성능적으로 유리합니다.
- 자신이 원하는 물리효과를 구현해서 사용하기 유리합니다. 리지드바디는 이미 구현된 물리 효과 이고 오픈소스가 아니기 때문에 수정할 수 없지만 캐릭터 컨트롤러는 물리 효과가 경량화 되어 구현 돼 있기 때문에 원하는 효과를 사용자가 직접 만들어서 사용 하면 됩니다.
- 멀티 게임에 유리합니다. 물리 효과를 직접 구현해서 사용하기 때문에 캐릭터의 위치를 동기화 하기 쉽습니다.
[캐릭터 컨트롤러 단점]
- 물리 효과를 직접 구현해야 합니다. 물리에 익숙한 사람이고 게임에 별다른 효과가 들어가지 않는다면 상관 없겠지만 상황에 따라서 큰 단점이 될 수 있습니다.
- 물체 간의 충돌을 무시하여 예외 처리를 해야 하는 경우가 생깁니다. 벽이 뚫리는 것을 원치 않는데 벽이 뚫린다 거나 하는 현상을 직접 수정해야 하는 경우가 종종 생깁니다
[리지드바디와 캐릭터 컨트롤러 비교]
물리적인 상호작용이 많다면 리지드바디를 사용하는 것을 추천 드리고, 상호작용이 적다면 캐릭터 컨트롤러를 사용하는 것이 좋습니다. 핵심은 물리효과의 이점을 취할 것인지 경사면의 이점을 취할 것인지 이기에 상황에 따라 사용하시면 좋을 것 같습니다.
저의 경우 따로 경사면을 제어하는 코드를 만들어 두고 리지드바디를 사용하는 편입니다. 이유는 경사면을 제어하는 코드는 어느 게임이든 사용 할 수 있지만 물리 효과의 경우 게임마다 다르기에 가장 효율 적인 방법이라 생각 했습니다.
[마무리]
처음 게임 개발을 할 때 어떤 것을 사용해야 하는지 고민이 많이 됐던 적이 있습니다. 에셋으로 판매되는 캐릭터 컨트롤러도 사용해 보고, 직접 물리효과도 사용해본 결과 저만의 효율적인 개발 방식을 찾아 나간 것 같습니다.
사람마다 물리 효과를 구현하는 것이 편할 수도 있고 캐릭터 조작을 구현하는 것이 편할 수 있습니다. 이 글을 보시는 분들도 처음부터 효율적인 방식을 찾기가 쉽지 않습니다. 그렇기에 에셋으로 판매되는 컨트롤러도 사용해 보시기도 하고, 직접 물리효과를 구현해 보시기도 하는 것이 좋습니다. 또한 경사면도 직접 구현해 보시는 것을 추천 드립니다. 이 세가지는 게임에 많이 사용되며 잘 모르게 되면 시간을 많이 소비하는 요소들 이기에 공부해 놓으시면 많은 도움이 됩니다.
제가 공부했던 방식은 컨트롤러의 경우 시중에 파는 에셋을 분석해 보고 응용해서 사용 했었습니다. 물리 분야의 경우 기초 물리학을 듣는 것도 좋으시며, 시간이 없다면 속도와 가속도의 개념 정도만 알고 계셔도 큰 도움이 되실 것 입니다.