VRChat 非公式日本語ドキュメント

AIナビゲーションの例

サンプルワールド

example world

Udonでは AI Navigation を利用できます。このサンプルでは、パスファインディング(経路探索)の仕組みや、ワールド内を歩き回るNPCキャラクターの作成方法を紹介します。

ぜひ AI Navigation Example World にアクセスして、実際に体験してみてください!

サンプルを利用する

このシーンには、赤いブロックから緑のブロックへ移動しようとしているNPCが配置されています。青いブロックを移動させて、NPCの通り道を作ることができます。UnityのAI Navigationは、ブロックを配置し直すたびに、NPCの経路を自動的に再計算します。

Unity Editorでシーンを開き、基本的な機能を確認してください。VRChatでの動作とほぼ同じになるはずです。プレイモードに入ると、NPCは緑のブロックに到達しようとします。青いブロックを移動させて、AIが目的地にたどり着けるように手助けできます。「Reset」ボタンを押すと、もう一度やり直すことができます。

サンプルのインポート

以下の手順に従って、このサンプルを Unity プロジェクトに追加します。

  1. Unity エディターのメニューの「VRChat SDK > 🏠 Example Central」から Example Central ウィンドウ を開きます。
  2. リストの中からこのプレハブを探すか、タイトル(このページのタイトルと同じ)で検索します。
  3. 「Import」ボタンを押して、Unitypackage をプロジェクトにインポートします。

技術的な解説

このシーンの仕組みを支えるUdonのロジック、シーン構成、そしてネットワーキングについて解説します。

ロジック

シーンが初期化されると、各NPCには destination として「NPC Finish」ブロックが設定されます。NPCはそこへ到達しようとしますが、直接つながる経路がないため失敗します。各 NPCStep がドロップされると、NavMeshSurface.BuildNavMesh を呼び出してメインのサーフェスを再構築します。これによりターゲットへのより良い経路が確保されると、各エージェントは旅を続けるためにそのステップに飛び乗ります。0.5秒ごとに、最初のNPCとターゲットブロックとの距離を、シーン開始時に保存された初期距離と比較することで進捗が再計算されます。チェック時に距離が0.15ユニット未満になるとパーティクルが放出され、進捗チェックが停止します。「Reset」ボタンを押せば、最初からやり直すことができます。

シーンの概要

シーンのヒエラルキーは以下の通りです。

ネットワーキング

インスタンス内の全ユーザーに対して同期を行うため、どの変数やロジックを同期させ、どれをローカルで実行するかを慎重に選択しています。

Courseには同期される変数が1つあります。それは progress float型変数で、これはCourseのオーナー側でチェックされ、更新されるたびに他の全ユーザーに同期されます。他のユーザーはこの変数の変更を監視し、変更があれば進捗バーを更新します。また、CourseはNetworked Eventを使用して、progresssuccessThreshold を超えたときに、全員に対して Win イベントを呼び出します。なお、successThreshold は、進捗を計測しているNPCの邪魔をする他のNPCを考慮して 0.8 に設定されています。

各NPCは、そのオーナーのデバイス上で NavMeshAgent によって移動し、VRCObjectSync コンポーネントが他の全ユーザーに対して自動的に位置を更新します。同期されたNPC側ではNavMeshを必要としないため、NavMeshのオーナーのみが実際にNavMeshを継続的に再構築します。

独自の変更を加える

シーンのコピーを作成したら、以下のアイデアを試してシーンをさらに発展させ、AI Navigationパッケージの力を体験してみましょう。

最終更新: