TIL

2024/01/25 TIL (CharacterController SkinWidth)

미역제자 2024. 1. 26. 09:45

Character Controller

https://docs.unity3d.com/kr/2021.3/Manual/class-CharacterController.html

 

캐릭터 컨트롤러 - Unity 매뉴얼

캐릭터 컨트롤러(Character Controller) 는 Rigidbody 물리를 활용하지 않는 3인 또는 1인 플레이어에 주로 사용됩니다.

docs.unity3d.com

  • Character Controller는 Rigidbody 물리를 활용하지 않는 3인칭 또는 1인칭인 플레이어에 주로 사용됨.
  • Character Controller는 따로 Collider component를 넣지 않더라도 collider가 달려있다. 
  • Character Controller 를 이용하여 Rigidbody가 달린 오브젝트를 푸시하고 싶을 경우, 스크립팅을 통해 OnControllerColliderHit() 함수를 사용하여 컨트롤러와 충돌하는 모든 오브젝트에 힘을 적용할 수 있다.
  • 스크립트에서 사용 가능한 CharacterController 요소들은 다음과 같다.
  • https://docs.unity3d.com/kr/2021.3/ScriptReference/CharacterController.html
 

CharacterController - Unity 스크립팅 API

A CharacterController allows you to easily do movement constrained by collisions without having to deal with a rigidbody.

docs.unity3d.com


Character Controller의 프로퍼티

Slope Limit 콜라이더가 명시된 값보다 작은 경사(단위:도)의 슬로프만 오르도록 제한합니다.
Step Offset 명시된 값보다 계단이 땅에 가까울 경우에만 캐릭터가 계단을 오릅니다. 이 값은 캐릭터 컨트롤러의 높이보다 커서는 안됩니다. 값이 더 클 경우 오류가 발생합니다.
Skin width 두 콜라이더가 서로 스킨 너비 만큼 관통할 수 있습니다. 스킨 너비가 클수록 지터링이 감소합니다. 스킨 너비가 작을 경우에는 캐릭터가 움직이지 못할 수 있습니다. 스킨 너비 값을 반지름의 10%로 설정하는 것이 좋습니다.
Min Move Distance 캐릭터가 지정한 값보다 낮게 움직이려고 할 경우 아예 움직이지 않게 됩니다. 지터링을 줄이기 위해 이 옵션을 사용할 수 있습니다. 대부분의 경우 이 값은 0으로 두어야 합니다.
Center 월드 공간에서 캡슐 콜라이더를 오프셋하며, 캐릭터의 피벗에는 영향을 주지 않습니다.
Radius 캡슐 콜라이더의 반지름 길이입니다. 본질적으로는 콜라이더의 너비입니다.
Height 캐릭터의 Capsule Collider 높이입니다. 이 값을 변경하면 콜라이더가 Y축을 따라 양의 방향과 음의 방향으로 스케일합니다.

Skin Width

  • Skin Width는 캐릭터 컨트롤러를 조정할 때 가장 중요한 프로퍼티 중 하나이다.
  • 캐릭터가 움직이지 못할 경우 대부분 Skin Width가 너무 작아서일 때가 많다.
  • Skin Width는 콜라이더 바깥쪽에 하나의 층을 새로 만든다고 생각하면 된다. 이 Skin Width에서 충돌을 감지하게 된다.
  • 적정범위는 radius의 10%보다는 큰 값, 0.01보다 큰 값이라고 한다.
  • Skin Width를 극단적으로 크게 두면 캐릭터가 공중에 뜬 것처럼 보일 수 있으니 적정값을 찾는 것이 중요하다.