56
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity でVRのテレポートを一番簡単に実現する方法

Last updated at Posted at 2019-05-23

概要

この記事は、VR上でよく目にする「テレポート」を実現するための手法を書いてあります。ハンドデバイスの先に放物線状に線が表示されて、ボタンを押すとその着地点にワープするというアレです。

順番としては

  1. VRのためのセットアップ
  2. VRTKインストール(Oculus Integrationも)
  3. ゲーム画面のセットアップ
  4. デバイス入力
  5. テレポートシステム

とやっていきます。

システム要件

  • Unity 2018.3.0f2
  • Oculus GO
  • Asset Storeで無料で取得できるアセット
    • VRTK (4.0.0)
    • Oculus Integration (1.36)

Android プラットフォームに切り替え

  1. Androidを選択

  2. Texture Compression をASTCに

  3. Switch Platform をクリック

    Build_Settings_と_Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_PC__Mac___Linux_Standalone__Metal_.png

PlayerSettings の設定

Oculus GO用にPlayerSettingsをいくつか変更します。

XR Settings

  1. Virtual Reality Supported にチェック

  2. +ボタンをクリック

  3. Oculus を選択

    Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

Other Settings

  1. Package Name を適当に自分のドメインを入れる

  2. Minimum API Level を「Android 4.4 'KitKat' (API level 19)」を選択

  3. Scripting Runtime Version を「.NET 4.x Equivalent」(デフォルトでなっているはず)

    Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

VRTKとOculus Integrationのインストール

ハンドデバイスやテレポートシステムを簡易的に使うには「VRTK」が一番簡単で良いだろうということで、VRTKを使うことにします。VRTKは最新版のv4.0.0を使うことにします。ただし、最新版はGitHubにしかない(2019/5/22現在)ので、gitコマンドで持ってくる必要があります。

ターミナル(もしくはcmd)で プロジェクトの Assets/ 以下に行って、以下のコマンドを打ちます

git clone --recurse-submodules https://github.com/ExtendRealityLtd/VRTK.git
cd VRTK
git submodule init && git submodule update

Gitコマンドがない、というかたは

からダウンロードしてください。その場合は

もダウンロードして

Assets/VRTK/Dependency/Zinnia.Unity/

に配置する必要があるので気をつけてください。

なお、現段階(2019/5/22現在)では以下のようなエラーが出てしまいます。

Assets/VRTK/Dependencies/Zinnia.Unity/Editor/Data/Collection/ObservableListEditor.cs(17,41): error CS0246: The type or namespace name 'InspectorEditor' could not be found (are you missing a using directive or an assembly reference?)

仕方ないので、手っ取り早く以下のファイルを__消します__

Assets/VRTK/Dependencies/Zinnia.Unity/Editor/Data/Collection/ObservableListEditor.cs

正常にインポートできれば、最後にウィンドウが出ます。「Add Input Mappings」を押します。
_VRTK__-_Manage_Input_Mappings.png

Oculus Integration は AssetStore からダウンロードしてインポートします。ただし全部必要ないので、「Platform」「VR」だけチェックが入るようにしましょう。

Import_Unity_Package.png

ゲーム画面のセットアップ

とりあえずステージとなるものとプレイヤーとなるものを作っています。
(ここでやっていることはこの通りではなくて良いです。ステージとなるCubeと、プレイヤーとなるオブジェクトを作っていれば何でも良いです)

  1. GameObject→3DObject→Cube で立方体を作って、Position(0,-1,0), Scale(20,1,20)。名前をFloorにする。
  2. GameObject→3DObject→Capsule でカプセルを作って、Position(0,0,0), Scale(1,0.5,1)。名前をHeadにする。
  3. GameObject→3DObject→Cube で立方体を作って、Position(0,0,0.2), Scale(0.7,0.2,0.7)。名前をHMDにして、Headにドラッグアンドドロップ(以下D&D)して子オブジェクトにする.
  4. GameObject→Create Empty で空オブジェクトを作って、Position(0,0,0)で名前をPlayer にする.
  5. Head を Player にD&Dして子オブジェクトにする.

こんな感じになるかと思います。(ちなみにこのプレイヤーは次回に使います。この時点では動きません)
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

VRTKのセットアップ

まずはVRTK で基本となる「TrackedAlias」を設定します。これは様々なデバイスを利用できるようにVRTK側でまとめてくれているものです。これを経由することでいちいちOculusはこれでVIVEはこれでとか設定しなくても良くなるというものです。

Assets/VRTK/Prefabs/CameraRig/TrackedAlias/TrackedAlias.prefab

をシーンにD&Dします。
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

次にOculus のカメラ

Assets/Oculus/VR/Prefabs/OVRCameraRig.prefab

もシーンにD&Dします。
シーンに元々ある MainCamera は削除しておきましょう。
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

シーンのルートに空オブジェクト(Position(0,0,0)に)を作って「OVRCameraRigRoot」という名前にして、それに先程の「OVRCameraRig」オブジェクトをD&Dして子オブジェクトにします。

シーン上の「OVRCameraRig」を選択して、OVRManager の項目で以下の項目を変更します。

  • Tracking Origin Type → Floor Level
  • Reset Tracker On Load → チェック
Unity_2018_3_0f2_-_Game_unity_-_MultiplayTest_-_Android__Metal_.png

「OVRCameraRigRoot」に「Linked Alias Association Collection」をアタッチします。そして以下のように設定します。

  • OVRCameraRigRoot → PlayArea
  • OVRCameraRigRoot>OVRCameraRig → Headset
  • OVRCameraRigRoot>OVRCameraRig>CenterEyeAnchor → Headset Camera
  • OVRCameraRigRoot>OVRCameraRig>LeftHandAnchor → Left Controller
  • OVRCameraRigRoot>OVRCameraRig>RightHandAnchor → Right Controller
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

TrackedAliasを選択して、Inspector(右の詳細画面)の一番下にある Elements の Size を 1 にします。
Element 0 のところに先程作った「OVRCameraRigRoot」をD&Dします。
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

デバイス入力

VRTKでデバイス入力をするためにはまず、VRTKの基本となる部分を進めます。

Assets/VRTK/Prefabs/CameraRig/UnityXRCameraRig/InputMappings/UnityXR.OpenVR.RightController.prefab

をシーンにD&D
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

続けて

  • Assets/VRTK/Prefabs/Pointers/ObjectPointer.Curved.prefab

をシーンにD&D
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

PointerFacadeの各項目に下のようにアサインします。

  • TrackedAlias>Aliases>RightControllerAlias → Folow Source
  • UnityXR.OpenVR.RightController>Trackpad>Touch[17] → Activation Action
  • UnityXR.OpenVR.RightController>Trackpad>Press[9] → Selection Action
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

一旦このシーンをセーブしておいてください。ファイル名は"Game"とかにしておきましょう。
この段階でOculus GO にビルドしてみましょう。デバイスのタッチ部に触ると、棒から放物線が出るはずです。

テレポートシステム

Assets/VRTK/Prefabs/Locomotion/Teleporters/Teleporter.Instant.prefab をシーンにD&Dします。

Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

シーンに配置した「Teleporter.Instant」を選択して、TeleportFacadeに以下のようにアサインします。

  • TrackedAlias>Aliases>PlayAreaAlias → Target
  • TrackedAlias>Aliases>HeadsetAlias → Offset
  • TrackedAlias>Aliases>SceneCameras → Camera Validity
Unity_2018_3_0f2_-_SampleScene_unity_-_MultiplayTest_-_Android__Metal_.png

次にパッドボタンを押した時にテレポートが発動できるようにします。
「ObjectPointer.Curved」を選択して、

  1. 一番下の方にある「Selected (Event)」の「+」ボタンをクリック
  2. 「Teleporter.Instant」を項目にD&D
  3. 「No Function」 を 「TeleporterFacade→Teleport」 に変更
Unity_2018_3_0f2_-_Game_unity_-_MultiplayTest_-_Android__Metal_.png

これで再度シーンをセーブしてOculus GOでビルドしてみて、ちゃんとテレポートシステムが作動しているか確認してください。

GO01.gif

次回は「UnityでマルチプレイVRを一番簡単に実現する方法」を解説していきます。

56
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?