トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity】XR Interaction Toolkit触る【VR】

Unity公式のXR Interaction Toolkit!!2019.3から使えます。

blogs.unity3d.com

ドキュメント。

docs.unity3d.com

読んでないので間違っているところとか無駄なところがあると思います。

speakerdeck.com

環境はUnity2019.3+OculusLink

サンプル

AR,VR両方のプロジェクトが一つのリポジトリに入っている。

github.com

今回はVRだけ触ります。

f:id:bibinbaleo:20191219131828p:plain

Locomotion

テレポート移動。

f:id:bibinbaleo:20191219131834p:plain

まさか斜めや垂直の壁にテレポートできるなんて!こんなの初めて!

WorldIntaractionDemo

UIも移動も物をつかむも全部入ってた。

f:id:bibinbaleo:20191219135114p:plain

でも、移動がうまくできない。

トリガー引いて1秒後ぐらいに移動する。

サンプルのプレハブ

プレハブに入ってるのはこんな感じ。

f:id:bibinbaleo:20191219161611p:plain

テレポートのエフェクト

f:id:bibinbaleo:20191219161608p:plain

何物でもないコントローラー

f:id:bibinbaleo:20191219161614p:plain

あとラマのモデルがいた。

サンプルなしで使う

サンプルプロジェクト以外で使う流れ

2019.3のPackagemanagerのPreviewから

f:id:bibinbaleo:20191219162056p:plain

XR Interaction Toolkitをインストール

f:id:bibinbaleo:20191219161928p:plain

入ったらヒエラルキー右クリック>XRの中に素材が入っている。

f:id:bibinbaleo:20191219162004p:plain

最初は~Rigってついてるやつを配置する。どっちでもいい

勝手にMainCameraが消えてXR Interaction Managerになってびっくりした。

f:id:bibinbaleo:20191219162231p:plain

構造

XRRig

カメラやコントローラーが入っている。

f:id:bibinbaleo:20191219131638p:plain

f:id:bibinbaleo:20191219131654p:plain

RoomScaleStationalyの切り替えができた。

f:id:bibinbaleo:20191219131651p:plain

RoomScaleだとMainCameraの値が直接変わる。

たぶんHMD側で取得した床からの高さ?

f:id:bibinbaleo:20191219145913p:plain

StationalyだとCameraOffsetにXRRigのCamera Y Offsetで設定した値が入る。

f:id:bibinbaleo:20191219145920p:plain

f:id:bibinbaleo:20191219145916p:plain

MainCameraは0を起点に頭が動いた分が動く

f:id:bibinbaleo:20191219145918p:plain

コントローラー

f:id:bibinbaleo:20191219131642p:plain

XR ControllerControllerNodeで右と左を設定

f:id:bibinbaleo:20191219132319p:plain

XR Ray Interactorでストレートと曲線のポインターを切り替えられる。

f:id:bibinbaleo:20191219132451p:plain

色も変えられる。

f:id:bibinbaleo:20191219132453p:plain

(サンプルでは)[RightHand Controller]Modelの下にオブジェクトを置くとコントローラーの位置にそのオブジェクトがついてくる。

f:id:bibinbaleo:20191219131646p:plain

UICanvas

uGUIをクリックできるようにするにはCanvasにTracked Devoce Graphic Raycasterをつける。

f:id:bibinbaleo:20191219135111p:plain

VRTKだと、Canvasの後ろにあるCanvasがあとからアクティブになった場合、Inputが後ろのキャンバスに反応してしまうという問題が起こってたけど、これではならなかった。

常に手前のCanvasが反応する。やったー!

Teleport

1、TeleportAreaTeleportAnchorがあるのでどっちかを地面につける

f:id:bibinbaleo:20191219153958p:plain

これを例えばPlaneにつけたらポインターが反応する。移動はまだできない。

 

ちなみにLayerで反応するオブジェクトを分けたり、エフェクト出したりするのはIntaractableEvent。

エフェクトのアクティブ、非アクティブ変えている。

f:id:bibinbaleo:20191219151048p:plain

f:id:bibinbaleo:20191219151051p:plain

 

2.XRRigにTeleportationProvider、LocomotionSystemなどを付ける。

f:id:bibinbaleo:20191219153157p:plain

これで動く。

ちなみにコントローラーのSelectUsageがデフォルトで生成されるものだとGripになっていた。この場合、Gripを押さないと移動してくれない。

Triggerに変えた。

f:id:bibinbaleo:20191219153203p:plain

 

移動したい床にスクリプト付けないとテレポートできないのかな?

Colliderには全部テレポートできるとうれしいのだが

SnapTurnProviderはスティックで向きを変えるやつ。

ものを持つ

XRGrabInteractableを付ける

f:id:bibinbaleo:20191219160445p:plain

これを付けたら勝手にRigidBodyもつく

これで決定を押したらビュンってコントローラーのほうに飛んでくる。 

最後に

VRTKやOculusIntegrationと似ているところもあって分かりやすい

でもVRTKと比べるとまだ機能少ないのかな

私が見つけてないだけかもしれないけど、スティック押し倒しでの移動とかなかった。向きは変わった。

各プラットフォームのコントローラーモデル素材はなさそう

VRTKには入っていたんだよね?よくわかってないけど。

VRTKってすごいんだなって思いました。