14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

一人Unity&C#Advent Calendar 2018

Day 25

【Unity】AIが賢く移動できるための機能、NavMeshとオフメッシュリンクを設定する

Posted at

最初に

本記事はUnityでのNavMeshとオフメッシュに関して解説した記事となります。

NavMeshとは?

ゲーム内に設置してあるジオメトリから、自動で生成される簡略化された地形の表面です。これのおかげによって、AIを持つキャラクターに障害物を避けて通るような知的な移動を行わせることが可能となります。

このNavMeshはNavMeshSurfaceという高レベルなNavMeshコンポーネントを使用することでランタイムでも更新することが可能なので、扉が開くなどのステージギミックがあった際にもNavMeshの繋がり部分を気にせず自由に作成することができます。

ちなみにこのNavMeshに沿って移動を行うキャラクターのことを**ナビメッシュエージェント(NavMesh Agent)**と呼びます。

NavMeshを用いた経路検索アルゴリズムはUnityではA*を採用しているようです。

NavMeshの生成

Unityのメニューから[Windows]→[AI]→[Navigation]と進んでください。
image.png

Inspector部にNavigationタブが表示されたと思います。

image.png
最初にシーン中の静的オブジェクトを示してBakeしてみましょう。

「Navigation Static」というチェックボックスをtrueにしてください。

次に[Bake]タブを開いてNavMeshを生成するのに必要なプロパティ群を確認していきましょう。

設定名 概要
Agent Radius キャラクターの中心が壁などにどの程度まで近づけるか
Agent Height キャラクターの手が届く高さ
Max Slope キャラクターが登れる傾斜角度
Step Height キャラクターが登れる段の高さ

蒸気をキャラクターのサイズに合わせて調整しましょう。

調整した後はBakeボタンを押下することで、NavMeshが作成できます。

image.png

青色になっている箇所がNavMeshが作成されていることを表しています。

作成後はAssetsフォルダ下の同シーンが格納されているフォルダ内にシーンと同名のフォルダが作成されているはずです。そのフォルダ下にNavMesh.assetが作成されます。

高レベルなNavMesh

Unityが用意しているNavMeshにはいくつか高度なNavMeshも存在しています。これらはUnity標準には含まれておらず、自身でUnity Technologies GitHubからDLしてインストールを行う必要があります。

↓公式の詳細ページ↓
https://docs.unity3d.com/ja/2018.1/Manual/NavMesh-BuildingComponents.html

この辺はまた改めて試して記事を書いてみようと思います。

オフメッシュリンクとは?

オフメッシュリンク(Off-Mesh Link)は歩行する以外での移動組み込みを可能にしてくれます。たとえば障害物を飛び越えさせて移動のショートカットを行わせる時に、このオフメッシュリンクが役立ちます。

では早速作成してみましょう。

オフメッシュリンクの手動作成

まず最初なのでGameObjectから任意のジオメトリを二つ用意してシーンのショートカットのStart位置とEnd位置の場所に設置してください。実際にゲームに組み込む際には空のGameObjectでも問題ありません

image.png

ショートカットを開始する場所に設置したら、Start側のオブジェクトにNavigation > Off Mesh Linkというコンポーネントを追加します。

そのコンポーネントの設定にStartとEndがあるので、それぞれ設置したジオメトリをアタッチしてください。

image.png

NavMeshがすでにBakeされていればオフメッシュリンクも有効となります。

適用されていない場合は、アタッチした後にNavMeshをBakeすることでオフメッシュリンクも適用されます。

オフメッシュリンクの自動生成

オフメッシュリンクはNavMeshと同様にBake時の設定で自動生成することも可能です。

まず、NavigationタブのObjectタブを確認しましょう。

ここにある「Generate OffMeshLinks」というチェックボックスをtrueに設定してください。

image.png

その後、Bakeタブに戻り、オフメッシュリンクの自動生成に必要な設定をさらに行いましょう。

image.png

設定名 概要
Drop Height 落下を行う高さの最高値
Jump Distance ジャンプを行う最長距離値

どちらも値を0に設定することでオフメッシュリンクは生成されなくなります

値の適正な数値は公式マニュアルを参考にしてみてください。↓
https://docs.unity3d.com/ja/2018.1/Manual/nav-BuildingOffMeshLinksAutomatically.html

ここまで設定できたらBakeを押下してみてください。以下のようにオフメッシュリンクが自動で生成されたのを確認できたと思います。

image.png

最後に

オフメッシュリンクの存在を知らなかったため、こんな便利機能があることに感動しました。さすがUnity、つよい。そのうちハイレベルなNavMeshも試して動かしてみたいと思います。

参考

14
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?