この記事でのバージョン
Unity 2018.4.1f1
Oculus Integration 1.38
はじめに
今回はUnityでOculus Quest向けのゲームを開発する際の最初の一歩的な感じの記事です!
ユニティちゃんライブステージ in Oculus Quest 2 pic.twitter.com/iQHPZjx2pL
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2019年6月24日
なお、VIVE(Steam)やOculus Goでも似たような記事を書いていました。
ユニティちゃんライブステージ
今回はユニティちゃん(Candy Rock Star)ライブステージを例に
Oculus Quest向けアプリの開発手順の説明を行います。(他のプロジェクトでも手順は基本同じ)
ちなみにユニティちゃんライブステージとは以下の動画の事で、
なんと、プロジェクトファイル一式が公開されていたりもするのです!
導入も簡単で上記サイトからプロジェクトをダウンロードし、
ダウンロードしたプロジェクトをUnityで開き、ScenesにあるMainというシーンを再生するだけで
冒頭の動画と同じものが開始されます。
Oculus Quest向けにビルド
Oculus QuestはAndroidで動いてるのですが、Androidでビルドするためには色々準備が必要なので、
Androidでビルドした事がない場合は、以下のページを参考に先に準備を済ませてください。
Androidの設定が済んだら、ユニティちゃんライブステージのPlatformをAndroidにします。
また、PlayerSettingsのOther Settingsにある
Minimum API LevelをAndroid 4.4 ‘KitKat’ (API level 19)に変更、
同様にColor SpaceもGammaに変更、
さらにXR SettingsのVirtual Reality Supportedを有効にし、Oculusを追加する必要もあります。
また、Oculus Questで見た時に不具合が出るので、
UnityCanStage/Prefabs/Main Camera RigのPostProcessing Behaviourを無効にしましょう。
最後にTexture CompressionをASTC、Build SystemをInternalにすればビルドの設定は完了で、
(ついでにCompression MethodもLZ4にするとアプリを圧縮出来ます)
後はBuildボタンを押せばapk(実行ファイル)がビルドされます。
なお、今回は先程のMainシーンだけを追加してビルドしました。
Oculus Questにインストール
apkをビルドしたら、Oculus Questにインストールしたいわけですが、
その前にOculus Questを開発者モードにする必要があります。
開発者モードはOculusアプリのその他の設定から有効に出来ます。
あとはUSBケーブルでPCと繋いでAndroidのスマホと同じ要領でapkをインストールします。
なお、インストールの仕方は先ほどのAndroidの設定ページにあります。
また、PCと繋いだ時にOculus Quest側(PC側ではなく)に許可しますか?(Allow USB debugging)
みたいなメッセージが出るので注意が必要です。
ちなみに自分でインストールしたアプリは提供元不明の欄に表示されます。
特にプログラム等は変更していないのに、
この状態で既に首を回して周りを見渡す事が可能ですし、
自分が移動すればVR内でも移動出来るようになっています……!
(ただし、カメラの位置は自動で切り替わる状態)
ユニティちゃんライブステージ in Oculus Quest 1 pic.twitter.com/jRFqvfKmTT
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2019年6月24日
Oculus Integration
一応、Oculus QuestでUnity製アプリを動かすという目的は果たしたんですが、
ついでにOculus IntegrationというOculus公式から出ている無料のアセットの紹介もしておきます。
ちなみにこれは楽にOculus Quest周りの実装が出来るという優れモノです!
Oculus Integration - Asset Store |
なお、Oculus IntegrationはOculus Quest以外にも、
Oculus GoやRift、Touch、Gear VRにも対応してるらしいですし、
Steam(VIVEとかも)でもそのまま使えるらしいです。(未確認)
Oculus Integrationはインストールしたら、PrefabがOculus/VR/Prefabに追加されるので、
カメラ(OVRCameraRig)を設置後、その下にコントローラー(OVRControllerPrefab)を左右分配置します。
カメラ設置時にOVRManagerの設定をQuestにし、
配置座標も調整します。(初期座標だとユニティちゃんと被るので)
また、左側のコントローラーの設定も変更しておきます。
あとは、元からあるカメラを無効にするために、
UnityChangeStage/Prefabs/Main Camera Rigの
Camera SwitcherとCamera Positionsを無効にします。
さらにコントローラーで移動するため以下のようなスクリプトをOVRCameraRigに追加します。
なお、Center Eye Anchorは追加時に自動設定され、MoveSpeedで移動速度を調整出来ます。
using UnityEngine; /// <summary> /// Transfomの座標を直接操作して移動するクラス /// </summary> public class TransfomMover : MonoBehaviour { //VR上で目の中心(見ている方向)を確認する用のアンカー [SerializeField] private Transform _centerEyeAnchor = null; //移動速度の係数 [SerializeField] private float _moveSpeed = 2; //================================================================================= //初期化 //================================================================================= //コンポーネントがAddされた時に実行される private void Reset() { //中心のアンカー取得 _centerEyeAnchor = transform.Find("TrackingSpace/CenterEyeAnchor"); } //================================================================================= //更新 //================================================================================= private void Update () { //スティックを倒してる方向を取得 Vector2 stickDirection = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick); //向いてる方向、スティックを倒してる方向から移動方向計算 Vector3 moveDirection = _centerEyeAnchor.rotation * new Vector3(stickDirection.x, 0, stickDirection.y); //座標を直接操作して移動 transform.position += moveDirection * _moveSpeed * Time.deltaTime; } }
これを実際にOculus Questで動かしてみたのが以下の動画になります。
ユニティちゃんライブステージ in Oculus Quest 2 pic.twitter.com/iQHPZjx2pL
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2019年6月24日
おわりに
紹介した通りUnityでOculus Quest向けアプリを開発する事自体はそこまで難しくありませんが、
Oculusの審査は色んな意味でかなりキツく、
そもそもQuestはリリースするアプリを絞ってるようなので、
基本リリースは出来ない(特に個人開発では)と考えた方が無難です。
もし、どうしてもVRゲームをリリースしたいという場合は
審査が丁寧かつ優しく、ライバルも少ないSteamをオススメします。