【Unity / NavMesh】AIを使って自動で移動する3Dモデルを作る

この記事では、UnityのNavMeshAgentとPlayMakerを組み合わせて、STYLYシーンで目的地まで自動で移動する3Dモデルを作る方法を紹介します。NavMeshAgentを使うことで、複雑な動きを簡単に作れます。そのため、この機能を使うことで動きのあるアクティブなシーンを手軽に作れるようになります。

サンプル

今回作成するのは、3Dモデルが自動で他の位置に移動するシーンになります。
以下のシーンでは、NavMeshを使うとどのような動きが作れるのかを確認できます。

NavMeshとは?

NavMeshとはAIを使用して、シーン内を移動する3Dモデルを作れるUnityの機能の一つです。
目的地に移動させるだけではなく、道中の動きを細かく設定することも可能です。また、障害物を避けるなど複雑な動きを追加することも出来ます。

NavMeshの使い方

今回は、この機能を使ってCapsuleがSphereの位置まで障害物を避けながら向かっていくというシーンを作成します。
この記事ではPlayMakerというアセットを使用します。そのため、事前にPlayMakerをインストールしておいてください。

ステージを作成してNavigationStaticに変更

ステージの概要

ステージの概要

ステージとなるPlaneと、壁となるCubeをシーンに配置します。
次に、Inspector上でステージを「NavigationStatic」に変更します。

StageをStaticに変更

StageをNavigationStaticに変更

Bakeして歩ける範囲を調節する

その後、メニュー > Window > AI > NavigationからNavigationウィンドウを開き、BakeタブのBakeボタンを押します。

Navigationの位置の解説

Navigationの位置の解説

すると、移動可能な範囲を水色で表示してくれます。

Bakeした範囲の解説

Bakeした範囲の解説

BakeタブのAgentRadiusを変更することで移動可能な範囲を調節できます。Radiusの変更後はBakeすることを忘れないでください。

PlayMakerを使ってCapsuleに目的地を設定する。

移動させたい3Dモデル(今回はCapsule)と移動先の3Dモデル(今回はSphere)を作ります。

作成した3Dモデルの解説

作成した3Dモデルの解説

Capsuleにコンポーネント「NavMeshAgent」を追加してください。Agentにはさまざまな設定項目が存在します。詳細については後述します。

Navmeshコンポーネントの解説

NavMeshAgentコンポーネントの解説

PlayMakerの設定をします。CapsuleにFSMを追加し、画像のように設定してください。

CapsuleのFSM設定_①

CapsuleのFSM設定_①


CapsuleのFSM設定_②

CapsuleのFSM設定_②

今回は起動時に移動先のPositionを取得し、目的地として設定するという動きを作成しています。
アクションのSetPropertyのターゲットオブジェクトには、CapsuleのNavMeshAgentコンポーネントを設定することに注意してください。
この状態で再生ボタンを押すと、CapsuleがSphereの位置まで移動することがわかります。

Agentのパラメーター

NavMeshAgentには動きに関するパラメーターが多数存在し、これらを調節することで細かい動きを設定できます。
設定項目の詳しい説明については、公式のドキュメントをご覧ください。

障害物を設置する

Bakeされた平面上に障害物を設置して、3Dモデルが迂回するように設定することもできます。

障害物となる3Dモデルを設置する

ステージの中に障害物を設置しましょう、今回は画像のように設置しました。

障害物設置後のシーン

障害物設置後のシーン

障害物にコンポーネント「NavMeshObstacle」を追加してください。

NavMeshObstacleコンポーネントの解説

NavMeshObstacleコンポーネントの解説

この状態でもCapsuleは障害物を避けることができますが、NavMeshObstacleコンポーネントのCarveにチェックをつけることでよりスムーズに回避できるようになります。

まとめ

以上のように、NavMeshを使用することで、簡単に動きのある3Dモデルを作ることが可能です。
また、今回のシーンでは目的地は一つでしたが、複数の目的地を設定することで一定の範囲を巡回するように設定したり、目的地をランダムにすることで予測不可能な動きを作ることが可能です。
ぜひNavMeshを使って表現の幅を広げてみてください。

STYLYにアップロードする方法

完成したシーンをSTYLYにアップロードしてみましょう。

STYLYアカウントを作成する

アカウント作成方法

STYLYにアップロードする方法

UnityからSTYLYにアップロードする方法

NEWVIEW SCHOOL ONLINEの紹介

VR/ARコンテンツ制作に必要なUnity・PlayMakerを基礎から応用まで学べ、STYLYで配信されている魅力的なコンテンツの制作過程(制作技術も公開します)を学べるNEWVIEW SCHOOL ONLINEを開講中です。