GodotでのOpenVRのOverlayのやりかた
ども
自分の性格をいつも嘆いてる者です
今回は、昔やろうとしてできなくて投げてたGodotでのVR Overlayができたので、まとめておきます
同じような人が居るとは思えないけど、日本語情報少ないし少しでも足しになればみたいな
さて、今回のステージはGodot_v3.2-stable_mono_win64です
なんでもいいと思いますが、たぶん3.2以降な気がするのでそんな感じで
全然気付けなくてうえ~~~んってなってた
github.com
こちらにありますので、ここだけでいい人はこちらで
若干説明足らんなって思ったので日本語で砕いて書いときます
どうやらVR Overlayは板を出す事しかできないようです......
こちらのWikiの通りにプロジェクト作ってOpenVRのアドオンを入れます
入れ方わからないから解説しろって感じならコメントかTwitterにリプください記事書きます
ほいでシーンのルートにいつもどおりで適当にSpatialとか置いといてください
それにGDScriptをアタッチ
中身はWikiの通りで
func _init(): var open_vr_config = preload("res://addons/godot-openvr/OpenVRConfig.gdns").new() open_vr_config.set_application_type(2) open_vr_config.set_tracking_universe(1) var server = ARVRServer.find_interface("OpenVR"); if !server or !server.initialize(): return false
application_typeはそのままです
0がOther(?)、1がScene(?)、2がOverlayです
デフォルトは1が入ってるようですね
tracking_universeは、プレイスタイルでしょうか
0が座ってる、1が立ってる、2がRaw(?)
表示位置をこちらで制御する事を考えると1の立ちがいいかもですね
あといつもの _ready(): でなく _init(): に書きましょう
これはARVRが初期化する前にapplication_typeを変えないといけないからですね
次にViewportを足します
ScriptにAddonの中のOpenVROverlay.gdnsを当てます
Sizeはお好きにですが、正方形になるので、比率変えたいときは後記の方法で対応してください
1:1じゃない場合は内部のControlのRectのScaleとかで比率対応すればいけます
今回はColorRectのScaleで対応
中にLabel入れときました
あとコントローラとかとりたいなってなると思うのでARVR系はいつもどおり入れてたほうが良いと思う(ここらへんWikiで書いてなかった気がした)
こんなかんじのヒエラルキー
こうしとけばコントローラはいつものノリで取れるので、
こんな感じの事をMainのスクリプトに書いとけば、Overlayの板が手に乗ります
onready var viewport = $Viewport onready var controller = $ARVROrigin/ARVRController func _process(delta): var controller_transform = controller.global_transform controller_transform.basis = controller_transform.basis.transposed() controller_transform.basis = Basis.IDENTITY.scaled(Vector3(1, 0.5, 1)) * controller_transform.basis viewport.overlay_position_absolute(controller_transform)
ここでこねてるのは、OpenVRは左手座標系で、Godotは右手座標系なので、それの対応ですね
あと正方形から比率変えたいときはここで変えときましょう
右手座標系なので掛け順注意(DirectX出身並感)
多分コードはこれで以上になると思います
VROverlay in #GodotEngine
— ひいらぎのぞみ (@nozomi_hiragi) 2020年3月30日
実コード皆無でしんどかった
Wikiに書いてあったってオチ
情報不十分だったけど pic.twitter.com/dVkiTTvwGz
こんな感じになるはず
僕に分かる範囲なら不明点聞いてもらえれば答えれるかと思います
では