🔥

Babylon.jsでVueを使用するチュートリアルをNuxt3で試す

2023/02/17に公開

概要

以前、Babylon.jsとNuxt3を組み合わせたリポジトリを作成しました。

https://zenn.dev/nakamura196/articles/f9ccaa237e57db

一方、Babylon.jsでVueを使用するチュートリアルが以下で公開されています。

https://doc.babylonjs.com/communityExtensions/Babylon.js+ExternalLibraries/BabylonJS_and_Vue

今回は、上記サイトにある以下のチュートリアルをNuxt3で実装しました。

https://doc.babylonjs.com/communityExtensions/Babylon.js+ExternalLibraries/BabylonJS_and_Vue/BabylonJS_and_Vue_2

デモサイトは以下です。

https://nakamura196.github.io/nuxt3-babylonjs/

ソースコードは以下です。

https://github.com/nakamura196/nuxt3-babylonjs

チュートリアル

Passing data from BabylonJS to Vue using callbacks

(日本語訳)これは、最も冗長ですが、最も安全で、最も拡張性と再利用性のあるアプローチです。基本的には、BabylonJSのシーンコードでメソッドを作成し、それに応じてエクスポートすることで、Vueコンポーネントにインポートし、それぞれを呼び出すことができるようになります。

https://nakamura196.github.io/nuxt3-babylonjs/third/

Passing data from BabylonJS to Vue using an exposed Engine object

(日本語訳)ここでの大きな変更は、createSceneメソッドがEngineとSceneオブジェクトを返すことで、それらがVueコンポーネントに公開され、コンポーネントが直接それらにアクセスできるようになったことです。この2つのオブジェクトは、後でアクセスできるようにVueコンポーネントに保存されます。その直後に、FPSの値を1秒ごとに親のApp.vueコンポーネントに送信するインターバルを作成します。BabylonJS EngineのオブジェクトからFPSの値を直接Vueコンポーネントに取り込みます。

Sending data from Vue to BabylonJS with loose coupling and without exposing the BabylonJS objects to Vue

(日本語訳)すでに書いたように、アクセスや操作が必要なものすべてに、メソッドを作成するだけです。(中略)BabylonJSのシーンファイルを修正し、これらのメソッドをエクスポートして、Vueコンポーネントでインポートできるようにします。

https://nakamura196.github.io/nuxt3-babylonjs/4/

Sending data from Vue to BabylonJS and vice versa with an exposed BabylonJS Vector3 object

(日本語訳)この例では、公開されたBabylonJSのオブジェクトを使った通信を紹介します。最後のメソッドでは、EngineとSceneオブジェクトを公開します。公開できるのは、ごくわずかです。例えば、Scene全体を公開するよりも、Vector3だけを公開する方が、はるかに良い方法です。

このシナリオでは、BabylonJSのシーンから、必要なVector3オブジェクトを、メソッド呼び出しで取得します。getPositionとgetRotationのメソッドを使用します。これらのVector3オブジェクトは、親コンポーネントのApp.vueに出力され、そこでデータが表示されます。

https://nakamura196.github.io/nuxt3-babylonjs/5/

Sending data from Vue to BabylonJS with an exposed BabylonJS Engine and Scene object

(日本語訳)そして最後に試す3つ目の方法は、EngineとSceneオブジェクトをBabylonScene Vueコンポーネントに公開する方法です。

https://nakamura196.github.io/nuxt3-babylonjs/6/

まとめ

それぞれの方法の違いについて十分に理解できていないため、引き続き検討を行いたいと思います。

Vue(Vue3およびNuxt3)でBabylon.jsを使用する際の参考になりましたら幸いです。

Discussion