Unity에서 파쿠르 시스템 구현

움직임을 사용하여 신체적 장애물을 극복하는 데 초점을 맞춘 훈련 분야인 파쿠르의 개념은 비디오 게임에서 엄청난 인기를 얻었으며 플레이어에게 상호작용적이고 매력적인 게임을 제공합니다. 환경. Unity에 이 시스템을 구현하면 게임플레이 경험이 향상될 수 있습니다. 이 튜토리얼은 벽 달리기와 높이뛰기에 초점을 맞춰 Unity에서 기본 파쿠르 시스템을 설정하는 과정을 안내합니다.

필요한 자산

  • 기본 캐릭터 컨트롤러: 수정을 위한 기본 클래스로 3인칭 카메라 Unity의 플레이어 컨트롤러를 사용하겠습니다.
  • 파쿠르 애니메이션: 벽 달리기, 높이뛰기 등

1. 장면 설정

  • 벽에는 "Wall"을 사용하고, 뛰어넘을 수 있는 장애물에는 "Obstacle"을 사용하여 환경에 벽과 장애물에 적절하게 태그가 지정되어 있는지 확인하세요.

2. Wall Running을 위한 'SC_TPSController' 스크립트 수정

2.1. 벽 감지:

  • 이 방법은 레이캐스팅을 사용하여 캐릭터가 벽 옆에 있는지 확인합니다.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. 벽 달리기

  • 이 코루틴은 벽 달리기를 처리합니다.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • 'Update()' 방법으로 벽 실행을 통합합니다.
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. Vaulting을 위해 'SC_TPSController' 수정

3.1. 장애물 감지

  • 캐릭터 앞에 뛰어넘을 수 있는 장애물이 있는지 확인하세요.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. 뜀

  • 보관 방법을 추가합니다.
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • 'Update()' 방법에 보관을 통합합니다.
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

결론

이러한 수정으로 인해 기존 3인칭 플레이어 컨트롤러에 벽 달리기 및 뛰어넘기 기능이 도입되었습니다. 다양한 시나리오에서 이러한 새로운 움직임을 테스트하여 의도한 대로 작동하는지 확인하세요. 게임의 특정 환경이나 원하는 파쿠르 메커니즘에 따라 조정이 필요할 수 있습니다.