CharacterController 컴포넌트 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

주요 기능 및 특징

1. 충돌 감지

  • CharacterController는 콜라이더와 충돌을 감지하고 처리합니다.
  • 이동할 때 다른 오브젝트와의 충돌을 자동으로 처리하여 캐릭터가 물리적으로 현실적인 반응을 보이게 합니다.

2. 중력 및 경사 처리

  • 중력을 직접 계산하여 적용할 수 있습니다.
  • 경사면 위를 걷거나 미끄러지는 등의 처리를 할 수 있습니다.

3. 이동 메서드

  • Move(Vector3 motion): 캐릭터를 지정한 벡터 방향으로 이동시킵니다.
  • SimpleMove(Vector3 speed): 현재의 속도 벡터를 사용하여 캐릭터를 이동시킵니다. 중력을 자동으로 적용합니다.

4. 속성

  • isGrounded 캐릭터가 현재 지면에 닿아 있는지 여부를 반환합니다.
  • velocity 최근 호출된 Move 명령에 의해 적용된 속도 벡터입니다.
  • height, radius 캐릭터의 높이와 반지름을 설정합니다.
  • center 콜라이더의 중심점을 설정합니다.
  • slopeLimit 캐릭터가 오를 수 있는 최대 경사각을 설정합니다.
  • stepOffset 캐릭터가 오를 수 있는 최대 계단 높이를 설정합니다.
  • skinWidth 충돌 감지의 정밀도를 설정합니다.

기본 사용 예제

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private CharacterController characterController;
    public float speed = 5.0f;
    public float gravity = -9.81f;
    public float jumpHeight = 1.0f;
    private Vector3 velocity;

    void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    void Update()
    {
        // 입력 처리
        float moveX = Input.GetAxis("Horizontal");
        float moveZ = Input.GetAxis("Vertical");

        Vector3 move = transform.right * moveX + transform.forward * moveZ;
        characterController.Move(move * speed * Time.deltaTime);

        // 중력 적용
        if (characterController.isGrounded && velocity.y < 0)
        {
            velocity.y = -2f; // Ensure the player stays grounded
        }

        if (Input.GetButtonDown("Jump") && characterController.isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        velocity.y += gravity * Time.deltaTime;
        characterController.Move(velocity * Time.deltaTime);
    }
}