CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Babylon.jsでNavigation Meshを使う方法を調べてみた

これはBabylon.js アドベントカレンダー2022の記事です。

qiita.com

Babylon.jsにはNavigation Meshという仕組みがあります。
Navigation Meshとは、指定場所までの移動経路を自動的に計算してくれる仕組みです。UnityだとNavMeshとして紹介されています。

今回はNavigation Meshという機能を簡単に解説します。

1. ナビゲーション機能はRecastJSを読み込むようになっている

細かいですが、Babylon.js自身はナビゲーション機能は持っておらず、RecastJSという機能を内部で読み込むことで使えるようにしています。

RecastJSはこちらです。  "A Javascript library to handle navigation meshes, in nodejs and the browser." とあり、UnityのNavMeshのような機能をJavaScriptで提供しています。

www.npmjs.com

Babylon.jsで使うためにRecastJSパッケージを読み込む必要はなく、このようにAPIとして提供されています。

let navigationPlugin = new BABYLON.RecastJSPlugin();

2. Babylon.js Documentationにはいくつかのサンプルコードがある

ここから読むと色々と書いてあります。
doc.babylonjs.com

サンプルコードは、マウスでクリックした位置にcubeが集まるというものです。

A navigation mesh sample on Babylon.js Playground

https://playground.babylonjs.com/#X5XCVT#240

障害物があると止まって、障害物がなくなると進む例もあります。

A navigation mesh sample with obstacles on Babylon.js Playground

https://doc.babylonjs.com/features/featuresDeepDive/crowdNavigation/obstacles

3. 地面だけでなく高さ方向にも移動できる

Navigation Meshには色々な条件を設定できます。サンプルコードでは"walkableClimb" という値が1.0ですが、これを10に変更すると、10mの高さまでで移動できることになります。

gist.github.com

変更するとこのようになります。L27の"walkableClimb"の値を変更すると試すことができます。

A navigation mesh sample with climbHeight on Babylon.js Playground

https://playground.babylonjs.com/#TN7KNN#2

4. おわりに

Navigation Meshについてはまだ調べ始めたばかりです。追いかけっこ的な表現を作る予定なので、できたらまた紹介したいと思います。