캐릭터 컨트롤러(Character Controller) 는 Rigidbody 물리를 활용하지 않는 3인 또는 1인 플레이어에 주로 사용됩니다.
프로퍼티: | 기능: |
---|---|
Slope Limit | 콜라이더가 명시된 값보다 작은 경사(단위:도)의 슬로프만 오르도록 제한합니다. |
Step Offset | 명시된 값보다 계단이 땅에 가까울 경우에만 캐릭터가 계단을 오릅니다. 이 값은 캐릭터 컨트롤러의 높이보다 커서는 안됩니다. 값이 더 클 경우 오류가 발생합니다. |
Skin width | 두 콜라이더가 서로 스킨 너비 만큼 관통할 수 있습니다. 스킨 너비가 클수록 지터링이 감소합니다. 스킨 너비가 작을 경우에는 캐릭터가 움직이지 못할 수 있습니다. 스킨 너비 값을 반지름의 10%로 설정하는 것이 좋습니다. |
Min Move Distance | 캐릭터가 지정한 값보다 낮게 움직이려고 할 경우 아예 움직이지 않게 됩니다. 지터링을 줄이기 위해 이 옵션을 사용할 수 있습니다. 대부분의 경우 이 값은 0으로 두어야 합니다. |
Center | 월드 공간에서 캡슐 콜라이더를 오프셋하며, 캐릭터의 피벗에는 영향을 주지 않습니다. |
Radius | 캡슐 콜라이더의 반지름 길이입니다. 본질적으로는 콜라이더의 너비입니다. |
Height | 캐릭터의 Capsule Collider 높이입니다. 이 값을 변경하면 콜라이더가 Y축을 따라 양의 방향과 음의 방향으로 스케일합니다. |
일반적인 둠 스타일의 1인칭 컨트롤은 물리적으로 사실적이지 않습니다. 캐릭터는 시간당 90마일을 달리고, 즉시 멈추며, 급선회하기도 합니다. 매우 비현실적이기 때문에 이러한 동작을 만드는 것은 실용적이지 않으며 좋은 방법도 아닙니다. 해결책은 특수 캐릭터 컨트롤러를 사용하는 것입니다. 이 컨트롤러는 단순한 캡슐 형태의 Collider 로 스크립트를 통해 일부 방향으로 이동시킬 수 있습니다. 이 컨트롤러는 지시에 따라 이동을 수행하되 충돌이 있을 경우 제약을 받습니다. 벽을 따라 올라가며, (계단이 Step Offset 보다 낮을 경우)계단을 올라가고, Slope Limit 내의 경사를 오릅니다.
컨트롤러는 자체의 힘에는 반응하지 않으며 자동으로 리지드바디를 푸시하지 않습니다.
캐릭터 컨트롤러를 이용하여 리지드바디나 오브젝트를 푸시하고 싶을 경우, 스크립팅을 통해 OnControllerColliderHit() 함수를 사용하여 컨트롤러와 충돌하는 모든 오브젝트에 힘을 적용할 수 있습니다.
한편, 플레이어 캐릭터가 물리에 의해 영향을 받도록 하고 싶을 경우, 캐릭터 컨트롤러 대신 Rigidbody를 사용하는 것이 좋습니다.
캐릭터의 메시에 맞게 Height 와 Radius 를 수정할 수 있습니다. 인간과 유사한 캐릭터의 경우에는 항상 2미터 정도로 설정할 것을 권장합니다. 피벗 포인트가 캐릭터의 정중앙에 있지 않은 경우에는 캡슐의 Center 도 수정할 수 있습니다.
Step Offset 도 영향을 미칠 수 있습니다. 2미터 크기의 인간일 경우 이 값을 0.10.4로 설정해야 합니다.
Slope Limit 는 너무 작아서는 안됩니다. 90°로 설정하는 것이 가장 좋은 경우가 많습니다. 캐릭터 컨트롤러는 캡슐 모양을 하고 있기 때문에 벽을 올라갈 수 없을 것입니다.
Skin Width__는 캐릭터 컨트롤러를 조정할 때 가장 중요한 프로퍼티 중 하나입니다. 캐릭터가 움직이지 못할 경우 대부분 Skin Width__가 너무 작아서일 때가 많습니다. __Skin Width__에 따라 오브젝트가 컨트롤러를 약간 관통할 수 있지만 지터링이 제거되고 캐릭터가 걸려 움직이지 못하는 현상을 피할 수 있습니다.
Skin Width 를 최소 0.01보다 크고, Radius 의 10%보다 크게 설정하는 것이 좋습니다.
Min Move Distance 를 0으로 유지할 것을 권장합니다.
여기에서 캐릭터 컨트롤러 스크립트 레퍼런스를 참조하십시오.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.