Unity

【Unity】NavMeshのベイクが重い時の対処法

はじめに

UnityでNavMeshのベイクが重い場合の対処法についての備忘録です。

本記事は以下のバージョンで確認できている情報です。
Unityバージョン:2022.3.47f1
バージョンが異なる場合操作方法やUIに差異がある場合がありますのでご注意ください。

発生した問題

大きなマップ(Terrainが数十個)があるシーンで、NavMeshをベイクしようとしたらベイクの処理に2~3時間要した。

ベイク後プロジェクトの起動に20分要するようになったり、起動後も一つ操作をすると読み込みが走って作業ができないレベルまで極端に動作が重くなった。

原因

NavMeshのベイクは初期設定では、シーンに存在するすべてのオブジェクトをベイク対象にしているため、適切な設定をしておかなければシーンすべてをベイクしようとして今回発生した問題のように処理が重くなってしまう。

対処法

下記のUnity公式マニュアルの記載に従い設定を行いベイクします。
※本記事では「Children」を設定した場合の操作方法について解説します。

手順①

Navmeshをベイクしたいオブジェクト(下図では「Terrain_(900.0, 0.0, 600.0)」)を選択し、インスペクターで「コンポーネントを追加」>「nav」と入力>「NavMeshSurface」を選択する。

手順②

手順①で追加した「NavMeshSurface」>「Object Collection」>「Current Object Hierarchy」の順に選択する。

・Unity公式マニュアルに記載されている名称とは異なる表記なので注意。
・その他の項目の設定は必要に応じて任意に行ってください。

必要な設定が終わったら「ベイク」を押してベイクする。

操作は以上となります。

本対処法の欠点について

本対処法の欠点としては、NavMeshをベイクしたいオブジェクトすべてに「NavMeshSurface」を追加しベイク処理を行うという手間がかかります。

対象オブジェクトが少なければ些細な問題ですが、10個20個となると話は違ってきます。

スクリプトを使うことで自動でベイクする方法もあるらしいのですが、残念ながらまだ実現できていないので実現できたら紹介します。

本記事は以上となります。

-Unity