Unity 내비게이션 및 에이전트 이동하기
이 문서에서는 Unity에서 내비게이션 시스템을 사용하여 에이전트를 특정 위치로 이동시키는 방법을 설명합니다. 내비게이션을 사용하면 게임 캐릭터나 오브젝트가 환경 내에서 자연스럽게 이동하도록 만들 수 있습니다.
기본 개념
Unity의 내비게이션 시스템은 NavMesh를 사용하여 게임 오브젝트의 경로를 생성하고 관리합니다. 에이전트는 NavMeshAgent 컴포넌트를 사용하여 목표 위치로 이동할 수 있습니다. 사용자가 마우스로 클릭하는 지점으로 에이전트를 이동시키는 간단한 방법을 살펴보겠습니다.
주요 구성요소
- NavMesh: 게임 오브젝트가 이동할 수 있는 경로를 정의합니다.
- NavMeshAgent: 내비메시 위에서 자동으로 경로를 찾아가는 에이전트를 설정합니다.
- Raycasting: 사용자가 클릭한 위치를 정확하게 찾기 위해 레이저를 쏴서 충돌 지점을 감지하는 기법입니다.
스크립트 예제
아래는 사용자가 마우스로 클릭한 지점으로 에이전트를 이동시키기 위한 C# 스크립트입니다.
using UnityEngine;
using UnityEngine.AI;
public class MoveToClickPoint : MonoBehaviour {
NavMeshAgent agent;
void Start() {
agent = GetComponent<NavMeshAgent>();
}
void Update() {
if (Input.GetMouseButtonDown(0)) {
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
agent.destination = hit.point;
}
}
}
}
코드 설명
- GetComponent(): 게임 오브젝트에서 NavMeshAgent 컴포넌트를 가져옵니다.
- Input.GetMouseButtonDown(0): 사용자가 마우스 왼쪽 버튼을 클릭했는지 확인합니다.
- Physics.Raycast(): 카메라에서 마우스 위치로 레이를 쏴서 충돌 지점을 찾습니다.
- agent.destination: 충돌지점으로 에이전트의 목표 위치를 설정합니다.
활용 예제
1. 에이전트 패트롤
여러 목표 지점 사이를 에이전트가 순환하도록 설정할 수 있습니다. 이 경우 List<Vector3>
를 사용하여 여러 위치를 저장하고, 현재 목표에 도달하면 다음 목표로 자동으로 이동하게 할 수 있습니다.
2. 장애물 회피
NavMeshAgent에는 장애물 회피 기능이 내장되어 있습니다. 이를 활용하면 에이전트가 실시간으로 장애물을 피하면서도 목표 지점으로 이동하게 할 수 있습니다.
3. 경로 최적화
복잡한 환경에서 에이전트의 경로를 최적화하여 더 빠르고 효율적으로 목표에 도달할 수 있습니다. NavMesh를 조정하거나 에이전트의 속성을 변경하여 향상된 성능을 얻을 수 있습니다.
결론
Unity의 내비게이션 시스템과 NavMeshAgent를 사용하면 게임 오브젝트가 원하는 방식으로 자연스럽게 이동하도록 구현할 수 있습니다. 이 문서에서 제시한 방법을 따라 다양한 게임 디자인에 활용해 보세요.