GodotでMetaQuest3向けのビルドテストをした時のメモ。公式チュートリアルを参考にしてますが、自分でつまづいた所をまとめてます。

https://docs.godotengine.org/en/4.2/tutorials/xr/index.html

はじめに

2024/03/14現在はまだGodot 4.3ではAssetLibが利用できないため、OpenXR関連のプラグインをインストールすることができません。なので以下の作業はGodot 4.2.1で行っています。

STEP.1 プロジェクト作成

godot_quest_example という名前で新規プロジェクトを作成。

STEP.2 OpenXRを有効にする

プロジェクト>プロジェクト設定…を開き、一般>XR>OpenXRを選択し「有効」をオンにする。

次に一般>XR>シェーダーを選び、有効をオンにする。

ここからOpenXRを有効にするためには再起動が必要なので、一度Godotを終了して再度プロジェクトを開く。

STEP.3 シーンの準備

Node3Dのシーンを作成し、ルートオブジェクト名を「Main」に変更する。

Mainの下にXROrigin3Dを作成する。

次にXROrigin3Dの下にXRCamera3Dを追加する。

つづいて、XROrigin3Dの下にXRController3Dを2つ追加し、それぞれの名前をLeftHand、RightHandと変更する。

LeftHandを選択して、右のインスペクターでTrackerにleft_handを選択。RightHandにはTrackerにright_handを選択する。

カメラのTransformのY座標に1.7、LeftHandのTransformに-0.5, 1.0, -0.5、RightHandのTransformに0.5, 1.0, -0.5 を設定する。

続いてMainノードに以下のスクリプトを設定する。

extends Node3D

var xr_interface: XRInterface

func _ready():
	xr_interface = XRServer.find_interface("OpenXR")
	if xr_interface and xr_interface.is_initialized():
		print("OpenXR initialized successfully")

		# Turn off v-sync!
		DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)

		# Change our main viewport to output to the HMD
		get_viewport().use_xr = true
	else:
		print("OpenXR not initialized, please check if your headset is connected")

ここでシーンをMain.tscnという名称で保存する。

STEP.4 仮想世界の手を作る

このままだと何もない空間なので、手の部分にボックスを表示してみます。

LeftHandとRightHandノードの下にそれぞれMeshInstance3Dノードを追加する。

追加したMeshInstance3DのMeshに「新規BoxMesh」を選択。その後ボックスのサムネイルをクリックすると表示される詳細設定でSizeに0.2, 0.2, 0.2を設定する。(LeftHand、RightHand両方のMeshInstance3Dに同様の設定をする)

STEP.5 OpenXR Pluginのインストール

Godotの上段にある「AssetLib」を選択し、検索バーに「openxr」と入力して検索してください。Godot OpenXR Vendors pluginとGodot XR Android OpenXR Loadersが表示されると思います。

プラグインの説明文にも書いてありますが、使用しているGodotのバージョンによってプラグインを選択してダウンロード&インストールしてください。

  • Godot 4.2系:Godot OpenXR Vendors plugin
  • Godot 4.0系、4.1系:Godot XR Android OpenXR Loaders

ここでプラグインをインストールしておかないと、次のSTEP.6でEnable Meta Pluginにチェックを入れることができません!

STEP.6 MetaQuest3に書き出す

ここからMetaQuest3にAPKを書き出すための固有設定を行います。Androidへのエクスポート設定が終わっていない場合はこちらを参照してください。テクスチャ圧縮のImport ETC2 ASTCを有効にしたり、バンドル名を指定したりしてください。(ここではバンドル名は仮にnet.penguindream.godot_quest_exampleとしました)

まず、Gradle Build>Use Gradle Buildをオンにします。次にXR Features>XRモードにOpenXRを選択、更にその下にあるEnable Meta Pluginをオンにします。

次にプロジェクト設定のレンダリング>レンダラーのレンダリングメソッド.mobileにgl_compatibilityを選択します。忘れやすいステップですが、この設定をしないとMetaQuest3上でうまくVRが描画されません。

STEP.7 アプリをMetaQuest3で実行

MetaQuest3の開発者モードへの変更など済ませて、PCとMetaQuest3をケーブルで接続。MetaQuest上で接続の許可をするとGodotの右上のリモートデバッグボタン(YouTubeアイコンのようなボタン)からOculus Quest 3を選択することでビルドから転送まで一括で行えます。

実行した結果はこんな感じでコントローラーにボックスが追従してきます。(何もライトが無のでボックスが真っ黒です)