Unity의 Character Controller는 3인칭 또는 1인칭 플레이어 캐릭터의 움직임을 제어하는 데 사용되는 컴포넌트입니다. Character Controller는 Rigidbody와 달리 물리적 충돌을 고려하지 않으며, 플레이어의 입력을 사용하여 캐릭터의 움직임을 제어합니다.
Character Controller의 주요 기능은 다음과 같습니다.
- 플레이어의 입력을 사용하여 캐릭터의 움직임을 제어합니다.
- 플레이어가 장애물과 충돌할 때 충돌 처리를 수행합니다.
- 플레이어가 계단이나 경사로를 올라갈 때의 움직임을 제어합니다.
Character Controller를 사용하려면 먼저 오브젝트에 Character Controller 컴포넌트를 추가해야 합니다. Character Controller 컴포넌트를 추가하면 다음과 같은 속성을 사용할 수 있습니다.
- Move() 함수: 캐릭터의 움직임을 제어하는 데 사용되는 함수입니다.
- OnControllerColliderHit() 이벤트: 캐릭터가 콜라이더와 충돌할 때 발생하는 이벤트입니다.
- SlopeLimit() 속성: 캐릭터가 경사로를 올라갈 때의 속도를 제한하는 데 사용되는 속성입니다.
기본 예제
Character Controller를 사용하여 캐릭터의 움직임을 제어하는 방법은 다음과 같습니다.
public class MyCharacterController : MonoBehaviour
{
private float moveSpeed = 5.0f;
private void Update()
{
// 캐릭터의 움직임을 제어합니다.
Vector3 movement = Input.GetAxis("Horizontal") * moveSpeed;
CharacterController.Move(movement);
}
}
이 코드는 MyCharacterController 클래스를 정의합니다. 이 클래스는 Update 함수를 구현합니다.
Update 함수에서는 Input.GetAxis() 함수를 사용하여 플레이어의 입력을 가져옵니다. 그리고, 가져온 입력을 사용하여 캐릭터의 움직임을 제어합니다.
충돌 처리 예제
Character Controller는 플레이어가 장애물과 충돌할 때 충돌 처리를 수행합니다. 충돌 처리는 OnControllerColliderHit() 이벤트를 사용하여 수행할 수 있습니다.
public class MyCharacterController : MonoBehaviour
{
private void OnControllerColliderHit(ControllerColliderHit hit)
{
// 충돌 처리를 수행합니다.
}
}
이 코드는 MyCharacterController 클래스를 정의합니다. 이 클래스는 OnControllerColliderHit() 이벤트를 구현합니다.
OnControllerColliderHit() 이벤트는 캐릭터가 콜라이더와 충돌할 때 발생합니다. 이벤트의 hit 매개변수는 충돌에 대한 정보를 제공합니다.
경사로 예제
Character Controller는 플레이어가 계단이나 경사로를 올라갈 때의 움직임을 제어합니다. SlopeLimit() 속성을 사용하여 캐릭터가 경사로를 올라갈 때의 속도를 제한할 수 있습니다.
public class MyCharacterController : MonoBehaviour
{
private float slopeLimit = 45.0f;
private void Update()
{
// 캐릭터의 움직임을 제어합니다.
Vector3 movement = Input.GetAxis("Horizontal") * moveSpeed;
CharacterController.Move(movement);
// 경사로 제한을 적용합니다.
Vector3 direction = movement.normalized;
float currentSlope = Vector3.Angle(direction, transform.up);
if (currentSlope > slopeLimit)
{
movement = movement.ProjectOnPlane(transform.up);
}
}
}
이 코드는 MyCharacterController 클래스를 정의합니다. 이 클래스는 Update 함수를 구현합니다.
Update 함수에서는 Input.GetAxis() 함수를 사용하여 플레이어의 입력을 가져옵니다. 그리고, 가져온 입력을 사용하여 캐릭터의 움직임을 제어합니다.
그런 다음, 경사로 제한을 적용합니다. Vector3.Angle() 함수를 사용하여 캐릭터의 움직임 방향과 캐릭터의 위쪽 방향 사이의 각도를 구합니다. 그리고, 구한 각도가 slopeLimit보다 크면, 캐릭터의 움직임을 캐릭터의 위쪽 방향으로만 제한합니다.
Character Controller의 장단점
Character Controller는 다음과 같은 장점을 가지고 있습니다.
- 플레이어의 입력을 사용하여 캐릭터의 움직임을 제어하기 쉽습니다.
- 물리적 충돌을 고려하지 않으므로, 캐릭터의 움직임이 부드럽습니다.
- 계단이나 경사로를 올라갈 때의 움직임을 제어할 수 있습니다.
Character Controller는 다음과 같은 단점을 가지고 있습니다.
- 물리적 충돌을 고려하지 않으므로, 장애물과 충돌했을 때의 반응이 자연스럽지 않을 수 있습니다.
- Character Controller의 크기와 모양에 따라 캐릭터의 움직임이 제한될 수 있습니다.
Character Controller의 사용 예
Character Controller는 다음과 같은 게임에서 사용될 수 있습니다.
- 3인칭 액션 게임
- 1인칭 슈팅 게임
- 플랫포머 게임
Character Controller를 사용하여 다음과 같은 캐릭터의 움직임을 구현할 수 있습니다.
- 걷기
- 뛰기
- 점프
- 구르기
- 공중제비
Character Controller의 활용 방법
Character Controller를 보다 효과적으로 활용하기 위해서는 다음과 같은 방법을 고려할 수 있습니다.
- Character Controller의 크기와 모양을 적절하게 설정합니다.
- Character Controller의 SlopeLimit() 속성을 사용하여 캐릭터의 움직임을 제어합니다.
- OnControllerColliderHit() 이벤트를 사용하여 충돌 처리를 수행합니다.
Character Controller는 Unity에서 캐릭터의 움직임을 제어하는 데 유용한 컴포넌트입니다. Character Controller를 사용하여 캐릭터의 움직임을 보다 자연스럽고 부드럽게 구현할 수 있습니다.
'Unity' 카테고리의 다른 글
월드 공간 지점을 스크린상의 지점으로 변환 : WorldToScreenPoint (0) | 2023.12.08 |
---|---|
화면 위치에 해당하는 Ray 생성 : Camera.main.ScreenPointToRay (0) | 2023.12.07 |
Unity의 Collision에 관하여 (0) | 2023.11.30 |
Unity의 PointEventData 클래스 (0) | 2023.11.27 |
간단하게 오브젝트 간의 각도 구하는 방법 (0) | 2023.11.24 |