Unity 開発者向け Wonderland Engine
このページでは、UnityからWonderland Engineへのスクリプティングのマッピングを提供し、ソリューション構築のための違いをリストアップします。
ビデオ形式を好む場合は、YouTube チャンネルの切り替えガイドをチェックしてみてください。
スクリプティング
Wonderland Engine はブラウザ上で動作し、JavaScript ランタイムがすでに組み込まれています。 これにより、追加のダウンロードが不要なため、Web エンジンのスクリプト言語として最適です。
スクリプトを作成するには、Wonderland Editor のアセットブラウザで右クリックして、新しい JavaScript / TypeScript コンポーネントを作成します。基本的なテンプレートが提供され、開始できます。
JS/TS に適した IDE は Visual Studio Code です。
Wonderland Engine の API が Unity のものとどのように違うのかについては、コードセクションをご覧ください。
TypeScript と JavaScript
TypeScript は JavaScript に静的型チェックを追加し、C# に近づけます。これにより、IDE のコード補完が大幅に向上します。 Unity に慣れた開発者には TypeScript を推奨します。
Wonderland Engine は自動的に tsconfig.json
のセットアップを行います。アセットブラウザから TypeScript コンポーネントを作成するだけです。
パッケージング
Unity のワークフローでは通常、エディタ内プレビューを使用しますが、Wonderland Engine では最終パッケージングプロセスが非常に速いため (1 秒未満)、ブラウザ内の最終アプリをプレビューとして利用できます。
リパッケージするたびにページがブラウザでリロードされ、Views > Preferences
で他の設定を確認して、保存後に自動的に実行できるようにします。
アプリケーションをデプロイするには、プロジェクトの deploy
フォルダーの内容を Web サーバーにアップロードするだけです。あるいは、Views > Plugins
でアクティブ化できる “Wonderland Cloud Publish” プラグインを使用してアップロードすることもできます。
複数のシーン
Wonderland Engine では、multiple project files(.wlp) で作成された複数のシーン間の切り替えが可能です。シーン切り替えチュートリアルを参照してください。
また、ランタイム中にシーンの一部をストリームすることもできます。Streaming .bin Files チュートリアルを参照してください。
プレハブ
Wonderland Engine にはプレハブに相当するものがまだありません。代わりに、シーンでプロトタイプを設定し、object.clone()
でその階層とすべてのコンポーネントを複製します。
または、プレハブオブジェクトを別のシーンに移動し、ランタイム中に engine.loadPrefab(…) を使用してロードし、それをインスタンス化します。
アセットのインポート
Wonderland Engine では、シーンファイルがインポートされると (アセットブラウザからドラッグ&ドロップして Scene View や Scene Outline に、または画像ファイルをマテリアルのテクスチャスロットにドラッグして)、変更があればリンクされて監視されます。シーンファイルで見つかったリソースはプロジェクト内で利用可能になり、「Resources」ビューで表示できます。
アセットブラウザからファイルがインポートされるまで、そのファイルはプロジェクトで使用できません。「Asset Browser」は、Unity のものとは異なるファイルブラウザと考えられます。
アセットの最適化
インポートされたアセットはさらに最適化できます:
- メッシュは頂点数を削減するために自動的に減少されます
- メッシュは均一にスケーリングできます
- 画像は自動的に圧縮されます
- 画像は縮小できます
これらの設定は「Resources」ビューで見つけられます。
ディレクトリ
deploy
にはパッケージングの最終結果が含まれています。static
にはそのままデプロイされるファイルが含まれています。cache
はキャッシュされたアセットコンパイル結果、例として圧縮画像が含まれます。通常削除しても安全ですが、再生成に時間がかかります。
これらの設定は「Resources」ビューで見つけられます。
アニメーション
アニメーションは animation
コンポーネントタイプを通じて再生されます。スキンアニメーションは retarget
チェックボックスを使用してターゲットスキンの骨/ジョイントの1つにコンポーネントが添付されている場合にリターゲットされます。
ブレンディング、キーフレーム編集やキーフレームイベントはまだサポートされていません。
物理演算
リジッドボディは physx
コンポーネントタイプを通じて作成されます。シーンはエディタで Debug > Simulate Physics (Alt + S)
を使用してシミュレートできます。
ネットワーキング
ピアツーピアネットワーキングは、コミュニティサポートによる Wonderland Engine PeerJS Networking で実現できます。
WebRTC を使用しており、一定の規模までデフォルトの PeerJS サーバーインフラを利用できます。
また、コミュニティはマルチユーザー用に Colyseus を統合しています。
UI
ユーザーインターフェースは cursor、cursor-target のようなコンポーネントを使用して手動でセットアップされますが、collider
コンポーネントも使用されます。
以下の HTML5 Canvas ベースの2D UIはコミュニティによって維持されています:Lazy Widgets project。
用語
用語 | Unity | Wonderland Engine |
---|---|---|
プロジェクト | プロジェクトファイル。 | 複数のプロジェクトファイルが単一のプロジェクトルートディレクトリを共有する可能性があります。 |
インスペクタービュー | プロパティビュー |
コード
以下に、一般的なコードパターンと、それに対応する Wonderland Engine の例を示します。
カスタムビヘイビア
Wonderland Engine では “Component” を使用します。“MonoBehaviour” の代わりに、Component クラス を拡張します:
Unity | Wonderland Engine (JavaScript) | Wonderland Engine (TypeScript) |
|
|
|
Unity と同様に、いくつかの UI 要素はパラメータのために生成されます。
ゲームオブジェクトにあるコンポーネントを取得
Unity | Wonderland Engine |
|
オブジェクトにコンポーネントを追加
Unity | Wonderland Engine |
子オブジェクトを取得
親オブジェクトを取得
マテリアルプロパティを設定
色やテクスチャなど様々なマテリアルプロパティを設定します。
Unity | Wonderland Engine |
数学
JavaScript は operator overloading をサポートしていないため、数学コードに対して別のアプローチをとります。
多くの場合では、Wonderland Engine の Object3D API は、変換を操作するための多数の関数を備えています。これらはWebAssemblyで効率的に実装されています。
ガベージコレクション
JavaScript はガベージコレクションを利用した言語であり、自動ガベージコレクションによる計画外の中断が発生することがあります。リストやベクトル、または簡単に収集されないオブジェクトをメモリに追加することは避けるのがベストプラクティスです。
カスタムコンポーネントのコンストラクタまたはボディ内で、一時的なベクトルやクォータニオンを作成して再利用するか、慎重に使用する場合は、コンポーネントのモジュールスコープ内に置くのがベストプラクティスです(クラスの上)。 [0, 1, 0]
のような定数ベクトルは、スコープ内に const AxisY = [0, 1, 0]
として宣言するのが最善です。
数学ライブラリ
JavaScript/TypeScript のためのパフォーマンスとガベージコレクションに配慮した数学ライブラリ glMatrix を使用することをお勧めします。これは、デフォルトテンプレートとデフォルトコンポーネントにすでにインストールされていますので、自身でインストールする必要はありません。
glMatrix
のベクトルやクォータニオンを計算する関数では、新たに割り当てられたベクトルを返すのではなく、結果をどこに書き込むかを最初のパラメータとして期待します。プリミティブを返す関数は通常通り結果を返します。
glMatrix 数学ライブラリの完全なドキュメントはこちらを参照してください。
Unity | Wonderland Engine |
JavaScript と C# の比較
C# から移行してくる際の顕著な違いは以下の通りです:
- メンバー変数にアクセスする際には常に
this.
をプレフィックスに追加します。 var
は「グローバル」を作成し、現在のスコープに制限されません。最善の方法はlet
またはconst
を使用してスコープされた変数を作成することです。