Unity

[Unity] CharacterController를 사용하며

이제ise이제 2022. 4. 21. 19:06

2022년 2~4월에 게임 개발하면 알게된 내용을 Unity Scripting API를 바탕으로 정리하는 글입니다.

※ 차후 수정될 수 있습니다.


CharacterController란

 

Character Controller 항목

  • class in UnityEngine ( : CharacterController를 스크립트에서 쓰려면 using UnityEngine을 먼저 작성해야함)
  • Rigidbody를 사용하지 않고도 충돌에 의한 움직임을 다룸
  • 관성, 중력 같은 힘에 영향 받지 않음
  • Move함수가 호출될 때나 충동에 의해 힘이 가해졌을만 움직임

 

Rigidbody - Use Gravity가 true로 켜져있는 사진

보통 RIgidbody의 Use Gravity를 true로 중력 넣어서 땅에 발닿게 하는데 CharacterController에는 그런게 없다.

- 불편한 점 : Rigidbody를 쓰면 공중부양 중인 캐릭터(혹은 오브젝트)를 플레이하면 자동으로 땅에 떨어지는데 그런걸 못해서 수작업으로 위치 잡아줘야함

   - 물론 위의 불편한 점은 내가 잘 몰라서 그런거고, isGrounded로 바닥(ground)에 닿았는지 체크하는 속성이 있으니깐 찾아보면 방법이 있을 거 같음. 

 

 

 

Mesh Collider가 적용된 Object와의 충돌 감지하기

1. Object의 Mesh Collider의 isTrigger가 켜져 있다면
OnTriggerEnter(), OnTriggerExit(), OnTriggerStay()로 사용가능

 

2. Object의 Mesh Collider의 isTrigger가 꺼져 있다면

OnControllerColliderHit()이나 OnCollisonEnter(), OnCollisionExit(), OnCollisionStay() 으로 사용가능(정확하지 않으니 더블체크 필요)

 

Unity Scripting API에 따르면

OnControllerColliderHit() 캐릭터 컨트롤러가 이동 중에 콜라이더에 충돌했을 때 호출
OnCollision~~() 다른 collider나 rigidbody와 닿거나, 닿았가다 떨어졌을 때나, 닿아있는 동안 매 프레임에 1번만 호출

내 프로젝트에서는 캐릭터에 캐릭터컨트롤러만 있음. Object에 Mesh Collider있음, Rigidbody 없음인 상태

이때 OnControllerCOnlliderHit에만 반응. OnControllerColliderHit()이랑 OnCollision~~()의 차이는 공부해야하는 부분