유니티/기능
유니티 내비메쉬(NavMesh) 다시 설정하기, 장애물(Obstacle) 설정하기
MJ_119
2024. 10. 1. 23:21
NavMeshObstacle을 사용하는 코드 예시:
using UnityEngine;
using UnityEngine.AI;
public class CubeTowerObstacle : MonoBehaviour
{
void Start()
{
NavMeshObstacle obstacle = gameObject.AddComponent<NavMeshObstacle>();
obstacle.carving = true; // NavMesh가 이 오브젝트 주변을 실시간으로 업데이트
obstacle.size = new Vector3(1f, 10f, 1f); // 탑의 크기에 맞춰 사이즈 설정
}
}
NavMesh를 다시 베이킹하는 코드 예시:
using UnityEngine;
using UnityEngine.AI;
public class RebuildNavMesh : MonoBehaviour
{
public NavMeshSurface navMeshSurface;
void Update()
{
if (/* 탑이 완성되는 등의 조건 */)
{
navMeshSurface.BuildNavMesh(); // NavMesh를 다시 베이킹
}
}
}
다음 두 가지 방법 중에서 상황에 맞는 것을 선택할 수 있습니다:
- NavMesh를 다시 베이킹하는 방법:
- 장점: NavMesh를 다시 베이킹하면 새로운 장애물(큐브 탑)을 완전히 반영하므로, AI가 탑을 피해서 정확하게 경로를 찾을 수 있습니다.
- 단점: 다시 베이킹하는 작업은 성능에 부담을 줄 수 있습니다. 특히 큰 NavMesh나 자주 변경되는 환경에서는 실시간으로 베이킹하는 것이 비효율적일 수 있습니다.
- 큐브 탑을 NavMesh 장애물(NavMeshObstacle)로 설정하는 방법:
- 장점: NavMeshObstacle은 실시간으로 변경되는 오브젝트에 적합하며, NavMesh를 다시 베이킹할 필요 없이 장애물로 지정할 수 있습니다. 성능 면에서 더 효율적입니다.
- 단점: NavMeshObstacle은 복잡한 모양이나 크기를 가진 장애물에 대해 정확도가 떨어질 수 있으며, 장애물의 크기나 형태가 단순해야 더 잘 작동합니다.
추천:
- 큐브 탑이 임시적이거나 동적으로 생성된 경우에는 NavMeshObstacle을 사용하는 것이 더 효율적입니다. 이렇게 하면 NavMesh를 다시 베이킹하지 않고도 장애물로 설정할 수 있습니다.
- 큐브 탑이 영구적이거나 더 정확한 경로 탐색이 필요할 때는 NavMesh를 다시 베이킹하는 것이 더 좋습니다.
동적인 장애물에는 NavMeshObstacle을 사용하는 것이 일반적으로 더 효율적이고, 성능에도 부담이 덜하므로 이 방법을 권장합니다.