Unity에서 NavMesh를 사용하여 NPC가 플레이어를 쫓도록 만드는 방법

이 튜토리얼에서는 Unity의 NavMesh 시스템을 사용하여 플레이어를 쫓는 NPC를 만듭니다. NavMesh는 효율적인 경로 찾기와 장애물 회피를 제공하여 3D 환경에서 AI 행동에 이상적입니다.

1단계: 장면 설정

NavMesh를 구현하기 전에 적절한 장면 설정이 필요합니다.

  1. Unity에서 새로운 3D 프로젝트를 만듭니다.
  2. 지면 역할을 할 Plane을 추가합니다.
  3. 플레이어를 나타내기 위해 Cube 또는 3D 모델을 추가합니다. 이름을 Player로 지정합니다.
  4. NPC를 나타내기 위해 다른 Cube 또는 3D 모델을 추가합니다. 이름을 NPC로 지정합니다.
  5. 플레이어와 NPC를 비행기의 다른 위치에 배치합니다.

2단계: NavMesh 베이킹

Unity의 NavMesh 시스템을 사용하려면 탐색 메시를 베이크해야 합니다.

  1. 계층 구조에서 기준 평면을 선택합니다.
  2. 검사기에서 구성 요소 추가를 클릭하고 NavMeshSurface를 추가합니다.
  3. NavMeshSurface 구성 요소에서 Plane이 보행 가능한 표면으로 표시되었는지 확인합니다.
  4. NavMeshSurface 구성 요소에서 Bake 버튼을 클릭하여 NavMesh를 생성합니다.
  5. 선택 사항: 장애물(예: 벽)이 있는 경우 NPC의 움직임을 차단하기 위해 NavMeshObstacle 구성 요소가 있는지 확인하세요.

3단계: NavMeshAgent 추가

이제 NPC가 Unity의 경로 찾기를 사용하도록 준비하겠습니다.

  1. 계층에서 NPC를 선택하세요.
  2. 검사기에서 구성 요소 추가를 클릭하고 NavMeshAgent를 추가합니다.
  3. 필요에 따라 속도, 가속도, 정지 거리 등 NavMeshAgent 속성을 조정합니다.

4단계: 체이스 스크립트 작성

다음으로 NPC가 플레이어를 쫓도록 하는 스크립트를 만들어 보겠습니다.

  1. 프로젝트 패널에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 NPCChase로 지정합니다.
  2. 스크립트를 두 번 클릭하면 코드 편집기에서 열립니다.
  3. 기본 코드를 다음으로 바꾸세요.
using UnityEngine;
using UnityEngine.AI;

public class NPCChase : MonoBehaviour
{
    public Transform player; // Reference to the player's position
    private NavMeshAgent agent; // Reference to the NavMeshAgent

    void Start()
    {
        // Get the NavMeshAgent component
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (player != null)
        {
            // Set the agent's destination to the player's position
            agent.SetDestination(player.position);
        }
    }
}

5단계: 스크립트 및 플레이어 참조 할당

마지막으로 스크립트를 할당하고 플레이어 참조를 설정합니다.

  1. 계층에서 NPC를 선택하세요.
  2. NPCChase 스크립트를 NPC로 끌어다 놓습니다.
  3. 검사기에서 스크립트의 Player 필드를 찾으세요.
  4. 계층 구조에서 플레이어 게임 객체를 플레이어 필드로 끌어다 놓습니다.

6단계: 장면 테스트

설정을 테스트하려면:

  1. Unity 편집기에서 재생 버튼을 누르세요.
  2. 플레이어를 이동합니다(예: 키보드나 컨트롤러 입력 사용).
  3. NPC가 동적으로 경로를 찾고 플레이어를 쫓으며, 필요한 경우 장애물을 피하는 모습을 관찰하세요.

선택 사항: 동작 사용자 정의

NPC의 행동을 더욱 세부적으로 조정할 수 있습니다.

  • 정지 거리: NavMeshAgent의 정지 거리를 조정하여 NPC가 특정 범위에서 멈추도록 합니다.
  • 장애물 회피: 정확한 회피를 위해 장애물에 NavMeshObstacle 구성 요소가 있는지 확인하세요.
  • 애니메이션: 속도에 따라 애니메이션을 트리거하여 NPC의 움직임을 보다 현실적으로 만듭니다.

결론

우리는 Unity의 NavMesh 시스템을 사용하여 플레이어를 동적으로 쫓는 NPC를 만들었습니다. 이 접근 방식은 견고하며 더 복잡한 AI 동작에 쉽게 확장할 수 있습니다. 다양한 설정을 실험하여 NPC의 경로 찾기를 게임의 필요에 맞게 조정하세요.