ヘッドセット・コントローラ参照 + オブジェクトをハイライト
「SteamVR Plugin 1.2.2」と「VRTK 3.2.1」の記事です。
ヘッドセット・コントローラ参照
VRTKがバージョンアップして、SteamVR PluginのプレハブとかがVRTK_SDKManagerの中に隠蔽されちゃいました。
takoyakiroom.hatenablog.com
これによって、OculusとかDaydreamとかでも使えるようになったのは良いけれど、んじゃヘッドセットやコントローラのオブジェクトはどうやって参照したら良いんだ?
といろいろ調べていたところ、その気持を察してか、最近のVRTK公式動画でやり方説明してました。(いいタイミングだ!)
[Intermediate] SDK Manager Script Registering
これによると、ヘッドセットやコントローラ等のデバイスは「VRTK_DeviceFinder」で参照できるらしい。
デバイス | 関数 | 備考 |
---|---|---|
左コントローラ | VRTK_DeviceFinder.GetControllerLeftHand() | |
右コントローラ | VRTK_DeviceFinder.GetControllerRightHand() | |
ヘッドセット | VRTK_DeviceFinder.HeadsetTransform() | SteamVRなら"Camera (eye)" |
プレイエリア | VRTK_DeviceFinder.PlayAreaTransform() | SteamVRなら"[CameraRig]" |
主要そうなのはこの4つかな? 他にもいろいろ状態を取得できます。
ただし、「Awake」で「VRTK_SDKManager.instance.AddBehaviourToToggleOnLoadedSetupChange」を、「OnDestroy」で「VRTK_SDKManager.instance.RemoveBehaviourToToggleOnLoadedSetupChange」を呼び出す必要があります。
「NullReferenceException」が発生していたら、こいつが原因の可能性ありです。
また、VRTK_DeviceFinderはオブジェクトの生成順的に(?)「OnEnable」以降が良いらしいです。
んで、具体的には以下のようになります。
適当なオブジェクトにアタッチして、トリガーボタンを押すとConsoleにヘッドセットとプレイエリアの情報が出力されます。
オブジェクトをハイライト
「VRTK_OutlineObjectCopyHighlighter」を使えば、オブジェクトのハイライト表示ができます。
まず、ハイライトさせたいオブジェクトに「VRTK_OutlineObjectCopyHighlighter」をアタッチ。
「Thickness」で線の太さを決めます。
スクリプトの中で「VRTK_OutlineObjectCopyHighlighter」の「Initialise()」を使って初期化、「Highlight(new Color(1, 0, 0))」でハイライト表示。
引数でハイライトの色が指定可能です。
「Unhighlight()」でハイライト終わり。
トリガーボタンを押している間、ハイライト表示させる場合、こんな感じのスクリプトになるかと。
「using VRTK.Highlighters;」を忘れないでね。
実行すると、ちゃんとハイライトしている・・・ がっ! モデルによってはハイライトしないのがある・・・
調べてないけど、自前のシェーダ使っているやつとかかな??