상세 컨텐츠

본문 제목

유니티 내비메쉬(NavMesh) 다시 설정하기, 장애물(Obstacle) 설정하기

유니티/기능

by 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를 다시 베이킹
        }
    }
}

 

 

다음 두 가지 방법 중에서 상황에 맞는 것을 선택할 수 있습니다:

  1. NavMesh를 다시 베이킹하는 방법:
    • 장점: NavMesh를 다시 베이킹하면 새로운 장애물(큐브 탑)을 완전히 반영하므로, AI가 탑을 피해서 정확하게 경로를 찾을 수 있습니다.
    • 단점: 다시 베이킹하는 작업은 성능에 부담을 줄 수 있습니다. 특히 큰 NavMesh나 자주 변경되는 환경에서는 실시간으로 베이킹하는 것이 비효율적일 수 있습니다.
  2. 큐브 탑을 NavMesh 장애물(NavMeshObstacle)로 설정하는 방법:
    • 장점: NavMeshObstacle은 실시간으로 변경되는 오브젝트에 적합하며, NavMesh를 다시 베이킹할 필요 없이 장애물로 지정할 수 있습니다. 성능 면에서 더 효율적입니다.
    • 단점: NavMeshObstacle은 복잡한 모양이나 크기를 가진 장애물에 대해 정확도가 떨어질 수 있으며, 장애물의 크기나 형태가 단순해야 더 잘 작동합니다.

추천:

  • 큐브 탑이 임시적이거나 동적으로 생성된 경우에는 NavMeshObstacle을 사용하는 것이 더 효율적입니다. 이렇게 하면 NavMesh를 다시 베이킹하지 않고도 장애물로 설정할 수 있습니다.
  • 큐브 탑이 영구적이거나 더 정확한 경로 탐색이 필요할 때는 NavMesh를 다시 베이킹하는 것이 더 좋습니다.

 

동적인 장애물에는 NavMeshObstacle을 사용하는 것이 일반적으로 더 효율적이고, 성능에도 부담이 덜하므로 이 방법을 권장합니다.

 

 

 

 

 

 

 

 

 

관련글 더보기