Godot OpenXR スターターは、6 ノードのリグで Meta Quest 3 にステレオ表示を出します——が、その時点でシーンは動きません。グラブできるコントローラーも、移動手段も、ポイントできる UI もない。Godot XR Tools がその穴を埋めます。ピックアップ、テレポート、移動、レーザーポインター、3D 内 2D UI——これらをプレハブシーンとしてリグに配置し、インタラクションのコードを手書きする代わりにします。本記事は OpenXR 記事の「次は動かす」続編です。

github.com/GodotVR/godot-xr-tools · ドキュメント · MIT

何であって、何でないか

Godot XR Tools は Godot XR チーム(Bastiaan Olij、Malcolm Nixon / GodotVR org)が保守するコミュニティアドオンです。エンジン内蔵ではなく、Asset Library か GitHub リリースから導入します。そしてフレームワークではなくスキャフォールド——すぐ動き出すための既製シーンとクラスの集まりであって、完成したインタラクションシステムではありません。グルーコードは結局書くことになります。

先にバージョンの注意を一つ。これがチームをつまずかせます。最新のタグ付き安定版は 4.5.1 で、明記された最小要件は Godot 4.4。4.6 専用のタグはまだありません——が、公式の godot-xr-template は XR Tools 4.5.1 を Godot 4.6 上で動かし、Quest エクスポートまで設定済みで出荷しています。摩擦の最も少ない出発点が欲しいなら、ゼロから組むよりこのテンプレートをクローンしてください。

導入

Godot 4.6 で AssetLib タブを開き、「Godot XR Tools for Godot 4」(アセット 1698)を検索・ダウンロードし、addons/godot-xr-tools フォルダをインポート。または godot-xr-template を取得すれば、ツールキット、OpenXR ベンダープラグイン、Android/Quest エクスポートプリセットが揃っています。

StartXR か手動初期化か——どちらか一方

ツールキットは addons/godot-xr-tools/xr/start_xr.tscn を同梱し、OpenXR(または WebXR)を自動で立ち上げます——OpenXR 記事が 5 行の _ready() で手動でやったのと同じ仕事です。両方は走らせないこと。さもないとランタイムを二重初期化します。あの記事から続けるなら、手動初期化をそのままに、以下のインタラクションシーンだけ足すのが最も低摩擦。新規なら start_xr.tscn とツールキットのステージングシステムを採用しましょう。

移動:プレイヤーボディと移動プロバイダー

XROrigin3D移動プロバイダーを追加すると、ツールキットが物理と接地判定を担う XRToolsPlayerBody を自動追加します。最小構成は Direct Movement(スティック滑走)+ Turn(スムーズかスナップ)。グライド、ジャンプ、クライム、フライト、グラップル、しゃがみ、風のプロバイダーも揃い、設計に応じて同じプレイヤーボディに重ねられます。

グラブ:ピックアップ、グラブポイント、スナップゾーン

  • XRController3D の子として XRToolsFunctionPickup を追加。
  • オブジェクトをつかめるようにするには、objects/pickable.tscn を継承したシーンを作るか、既存の RigidBody3DXRToolsPickable スクリプトを付与。
  • 任意でグラブポイント(カスタム手ポーズ付き)を足すと自然な握りにスナップし、XRToolsSnapZone はピックアブルを所定位置に保持します——ソケット、ホルスター、「鍵を鍵穴へ」パズルの土台です。

テレポートとポインター UI

  • function_teleport シーンを手のコントローラー下にインスタンス化し、アクション(トリガーまたはグリップ)に割り当ててアーク型テレポート移動に。
  • UI には Viewport2Din3D ノードを追加し、ふつうの Godot 2D シーン——ボタン、スライダー、通常のコントロール配置——を割り当てます。コントローラーに XRToolsFunctionPointer を足せば、レーザーがその 2D ビューポートをマウスのように操作します。注意:標準ではポインターは主に Viewport2Din3D パネル向け。任意の 3D オブジェクトを指すには StaticBody3D +衝突形状と少しのコードが要ります。

手堅いハッカソンの的:Direct Movement + Turn のプレイヤーリグ、ピックアブルのキューブ 1 つ、テレポートエリア、デモを開始するためにポイントする浮遊 Viewport2Din3D メニュー。これでネイティブの手触りの VR ループ一式が、半日で組めます。

注意点

  • バージョンを固定。 XR Tools のマイナー更新は、これまで常に最小 Godot バージョンを引き上げ、破壊的変更を伴ってきました(4.5.0 は下限を Godot 4.4 へ)。特定のツールキットのタグを特定の Godot パッチに固定し——テンプレートの Godot 4.6 + XR Tools 4.5.1 の組み合わせが既知の良好ペア——イベント中に更新しないこと。
  • 4.6 専用タグはまだない。 4.5.1 安定版は Godot 4.6 より前で、README はいまも最小 4.4 と記載。4.6 で動きます(公式テンプレートが証明)が、「公式タグ付き」ではなく「テンプレートで検証済み」と捉えてください。イベント時にリリースページを再確認を。
  • GDScript です。 インタラクションのロジックはすべて GDScript で、Quest 単体機のモバイルチップでは効いてきます。ツールキットはシェーダーを事前キャッシュしてヒッチを避けますが、重いインタラクションシーンはなおフレームを食います——実機でプロファイルを。
  • ハンドトラッキングは弱点。 XR Tools の機能は概ねコントローラー前提。OpenXR のハンドトラッキングをこれらに橋渡しするには別アドオン GodotXRHandPoseDetector が要り、手トラッカーのデータを仮想コントローラーに変換します。ハンドトラッキングそのものが目的でない限り、コントローラーを既定に。
  • フレームワークではなくスキャフォールド。 グルーは書く前提で——ポインターが 3D オブジェクトに触れるには衝突体とコード、テレポートは起動の割り当て、ピックアブルはしばしば調整が要ります。ツールキットが消すのは定型作業であって、設計作業ではありません。

関連リンク

ご質問はお問い合わせページからどうぞ。

// ニュース一覧へ戻る