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);
}
}