unityで作成したVR空間をoculusに実装する方法-レーザーポインターでオブジェクトを選択する方法-


OculusとUnityの接続が無茶苦茶ハマる

OculusとUnityの接続に関して、ネット上に数多くの屍が散見します。
その屍を乗り越えて、下のような実装を行ったので、今後の自分のためにもナレッジを残そうと思います。
完成したVR空間がこちら↓

一応公式ドキュメントも貼っておきますが、このドキュメントを乗り越えるのがムチャクチャ大変です。
どMの方は、どうぞ読みといてください。

 開発環境

Oculusの初期設定

公式ドキュメントはこちら

1 Oculusアプリをスマホに入れ、Oculusの初期設定を行う

この際に、facebookアカウントとリンクさせると、その後の設定がスムーズになります。

2 アプリからデバイスを選択し、その他の設定から開発者モードをオンにする

これをオンにすることで、自分が作ったアプリをOculus上に上げることができます。

3 PCとOculusを接続し、PCとのデータのやりとりをOculu上で許可する

この設定により、PCから作成したVR環境のデータをOculusに送信することができます。

Unityの初期設定

公式ドキュメントはこちら

1 プロジェクトの立ち上げ

2 ビルド設定を修正

「テクスチャ圧縮」をASTCに変更
「デバイスを実行」を一度refreshを押した後に、自分のデバイスが選択できるようになるので、自分のデバイスを選択
その後「Switch Platform」を選択
終了後、左下の「Player設定」を選択

3 Player設定を修正

企業名とプロダクト名を固有のものに設定

最低APIレベルを「Android 6.0」に設定

4 XRPlugin Managementのインストール

インストールが完了すると下図のような設定になっていればOK


5 Oculus Integration(Oculus統合パッケージ)のインストルール

*必ず上記の設定が終了してからOculus Integrationをインポートしてください!!!
もう一度書きます!
必ず上記の設定を終了させてからOculus Integrationをインポートしてください。まじでハマります。

公式ドキュメントはこちら
アセットストアで「Oculus Integration」と検索し、左下のOculusのマークのパッケージをUnityにインストール&インポート。

インポートを軽くするために、Avatar,LipSync,SampleFrameworkのチェックを外しておく。

インポート中にアップグレードを勧められるの、全て「yes」を選択。UnityがRestartされる。

VR環境の構築

1 OVRGazaPointerをprehab化する。

Sceneの中のUIを選択

Hierarchyの中のOVRGazaPointerをPrefabsの中にドラック&ドロップする。

2 OVRCameraRigの設定

1) 新しくSceneを作成し、Hierarchyの中に、prefabsからOVRCameraRigをドラック&ドロップする。

2) 元々あったMian Cameraは削除する。

3) OVRCameraRig/TrackingSpace/RightHandAnchor/RightControllerAnchorの下にPrefabsからOVRControllerPrefabをアタッチする。自動的にコントローラーとしてR Tracked Remoteが設定される。

3 uGUIを構成する

1 Canvasを作成


Canvasのインスペクターを以下のように設定する。

1)CanvasのRender Modeをスクリーンスペース・カメラに変更。
2)CanvasのEventCameraをOVRCameraRig/TrackingSpace/CenterEyeAnchorに設定。1)と2)よって常に正面にCanvasが設定されるようになる。
3)CanvasのGraphicRaycasterコンポーネントを削除。
4)CanvasにOculus/VR/Scripts/UtilのOVRRaycasterを追加。
5)OVRRaycasterのBlocking Objects欄を"すべて"に変更。

以下のようになればOK

2 OVRGazaPointerの設定

1)PrefabsからOVRGazaPointerをHierarchyにドラック&ドロップする。


作成したOVRGazePointerのRay Transform欄は、OVRCameraRig/TrackingSpace/RightHandAnchorを設定する。

3 EventSystemの設定

1)EventSystemからStandaloneInputModuleコンポーネントを削除
2)EventSystemのOculus/VR/Scripts/UtilのOVRInputModuleを追加
3)OVRInputModuleのRay TransformにOVRCameraRig/TrackingSpace/RightHandAnchorを設定
4)カーソルにOVRGazaPointerを設定
5)Joy Pad Click Keyにone(Aボタン),Two(Bボタン),Secondary Index Trigger(Triggerボタン)を設定し、作動するボタンを設定する。

以下のようになっていればOK

4 UI部品を設置

試しにボタンを設置する設定を記載します。

1)CanvasにButtonを設置。
2)AssetsにButtonAction.csを作成し、以下のスクリプトを追加。
ButtonAction.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonAction : MonoBehaviour
{
    [SerializeField] Image image;

    public void OnClick()
    {
        image.color = Color.red;
    }
}
3)Button ObjectにButtonAction.csを設定
4)クリック時のイベントにButtonAction.OnClickを設定

Build & Run

作成したVR空間をOculus上に表見するために、Build & Runを行います。
「デバイスを実行」は自身のデバイを選択してください。

完成したVR空間がこちら(再掲)↓