본문 바로가기
Study/Unity

[Unity] NavMesh 동적 베이킹(feat. Static 체크박스)

by 스테디코디스트 2024. 1. 9.
반응형

게임 실행 중 NavMesh의 Map을 변경해야 될 일이 생겨서 NavMesh 동적 베이크에 대해 알아보았다.

 

기본적으로 unity 22버전 이후에는 NavMesh 전용 패키지가 생겨 해당 패키지를 다운받아 사용하면 이전 버전에서 깃허브에서 다운받아 사용하던 고급 NavMesh가 기본적으로 내장이 되었다.

 

아래와 같이 컴포넌트를 설정하고, 스크립트를 작성해 MapManager에 연결하면 끝! 인줄 알았지만 가장 밑의 이미지처럼 오류가 생겼다. 이것저것 해보다가 알아낸 결과, 왜인지는 잘 모르지만 GameObject 옆의 Static 체크박스를 모두 해제하니깐 되었다!

MapManager에 NavMeshSurface 컴포넌트가 있는 GameObject AI Map 연결

 

NavMeshSurface 설정(설정은 하고싶은대로..)

using Unity.AI.Navigation;
using UnityEngine;

public class MapManager : MonoBehaviour
{
    public GameObject AIMap;

    NavMeshSurface[] UsersMap;

    private void Awake()
    {
        // NavMeshSurface 컴포넌트를 연결
        UsersMap = AIMap.GetComponentsInChildren<NavMeshSurface>();
    }

    public void BakeMap(int userNum)
    {
        // 새로운 맵을 베이크
        UsersMap[userNum].BuildNavMesh();
    }

    private void Update()
    {
        if (Input.GetKeyUp(KeyCode.B))
        {
            // 첫 번째 NavMeshSurface를 이용해 bake
            BakeMap(0);
        }

        if(Input.GetKeyUp(KeyCode.N))
        {
            // 두 번째 NavMeshSurface를 이용해 bake
            BakeMap(1);
        }
    }
}

static 체크박스 체크시 나는 오류
GameObject 옆의 Static 체크박스 해제상태