Unity에서 파쿠르 시스템 구현

움직임을 사용하여 신체적 장애물을 극복하는 데 초점을 맞춘 훈련 분야인 파쿠르의 개념은 비디오 게임에서 엄청난 인기를 얻었으며 플레이어에게 상호작용적이고 매력적인 게임을 제공합니다. 환경. Unity에 이 시스템을 구현하면 게임플레이 경험이 향상될 수 있습니다. 이 튜토리얼은 벽 달리기와 높이뛰기에 초점을 맞춰 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인칭 플레이어 컨트롤러에 벽 달리기 및 뛰어넘기 기능이 도입되었습니다. 다양한 시나리오에서 이러한 새로운 움직임을 테스트하여 의도한 대로 작동하는지 확인하세요. 게임의 특정 환경이나 원하는 파쿠르 메커니즘에 따라 조정이 필요할 수 있습니다.

추천 기사
Unity용 대화 시스템
Unity용 헬리콥터 컨트롤러
Unity의 2D 플랫폼 게임 캐릭터 컨트롤러에 이중 점프 지원 추가
Unity에서 크레인 제어를 만드는 방법
Unity용 자동차 컨트롤러
캐릭터 컨트롤러 Unity에서 강체를 푸시하는 기능을 추가하는 방법
Unity용 비행기 컨트롤러