Unity에서 NavMesh를 사용하여 NPC가 플레이어를 쫓도록 만드는 방법
이 튜토리얼에서는 Unity의 NavMesh 시스템을 사용하여 플레이어를 쫓는 NPC를 만듭니다. NavMesh는 효율적인 경로 찾기와 장애물 회피를 제공하여 3D 환경에서 AI 행동에 이상적입니다.
1단계: 장면 설정
NavMesh를 구현하기 전에 적절한 장면 설정이 필요합니다.
- Unity에서 새로운 3D 프로젝트를 만듭니다.
- 지면 역할을 할 Plane을 추가합니다.
- 플레이어를 나타내기 위해 Cube 또는 3D 모델을 추가합니다. 이름을 Player로 지정합니다.
- NPC를 나타내기 위해 다른 Cube 또는 3D 모델을 추가합니다. 이름을 NPC로 지정합니다.
- 플레이어와 NPC를 비행기의 다른 위치에 배치합니다.
2단계: NavMesh 베이킹
Unity의 NavMesh 시스템을 사용하려면 탐색 메시를 베이크해야 합니다.
- 계층 구조에서 기준 평면을 선택합니다.
- 검사기에서 구성 요소 추가를 클릭하고 NavMeshSurface를 추가합니다.
- NavMeshSurface 구성 요소에서 Plane이 보행 가능한 표면으로 표시되었는지 확인합니다.
- NavMeshSurface 구성 요소에서 Bake 버튼을 클릭하여 NavMesh를 생성합니다.
- 선택 사항: 장애물(예: 벽)이 있는 경우 NPC의 움직임을 차단하기 위해 NavMeshObstacle 구성 요소가 있는지 확인하세요.
3단계: NavMeshAgent 추가
이제 NPC가 Unity의 경로 찾기를 사용하도록 준비하겠습니다.
- 계층에서 NPC를 선택하세요.
- 검사기에서 구성 요소 추가를 클릭하고 NavMeshAgent를 추가합니다.
- 필요에 따라 속도, 가속도, 정지 거리 등 NavMeshAgent 속성을 조정합니다.
4단계: 체이스 스크립트 작성
다음으로 NPC가 플레이어를 쫓도록 하는 스크립트를 만들어 보겠습니다.
- 프로젝트 패널에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 NPCChase로 지정합니다.
- 스크립트를 두 번 클릭하면 코드 편집기에서 열립니다.
- 기본 코드를 다음으로 바꾸세요.
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단계: 스크립트 및 플레이어 참조 할당
마지막으로 스크립트를 할당하고 플레이어 참조를 설정합니다.
- 계층에서 NPC를 선택하세요.
- NPCChase 스크립트를 NPC로 끌어다 놓습니다.
- 검사기에서 스크립트의 Player 필드를 찾으세요.
- 계층 구조에서 플레이어 게임 객체를 플레이어 필드로 끌어다 놓습니다.
6단계: 장면 테스트
설정을 테스트하려면:
- Unity 편집기에서 재생 버튼을 누르세요.
- 플레이어를 이동합니다(예: 키보드나 컨트롤러 입력 사용).
- NPC가 동적으로 경로를 찾고 플레이어를 쫓으며, 필요한 경우 장애물을 피하는 모습을 관찰하세요.
선택 사항: 동작 사용자 정의
NPC의 행동을 더욱 세부적으로 조정할 수 있습니다.
- 정지 거리: NavMeshAgent의 정지 거리를 조정하여 NPC가 특정 범위에서 멈추도록 합니다.
- 장애물 회피: 정확한 회피를 위해 장애물에 NavMeshObstacle 구성 요소가 있는지 확인하세요.
- 애니메이션: 속도에 따라 애니메이션을 트리거하여 NPC의 움직임을 보다 현실적으로 만듭니다.
결론
우리는 Unity의 NavMesh 시스템을 사용하여 플레이어를 동적으로 쫓는 NPC를 만들었습니다. 이 접근 방식은 견고하며 더 복잡한 AI 동작에 쉽게 확장할 수 있습니다. 다양한 설정을 실험하여 NPC의 경로 찾기를 게임의 필요에 맞게 조정하세요.