(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

UnityでOculus Quest向けアプリを開発する際の手始め【Unity】【VR】【Oculus Quest】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2018.4.1f1
Oculus Integration 1.38


はじめに

今回はUnityでOculus Quest向けのゲームを開発する際の最初の一歩的な感じの記事です!




なお、VIVE(Steam)やOculus Goでも似たような記事を書いていました。






ユニティちゃんライブステージ

今回はユニティちゃん(Candy Rock Star)ライブステージを例に

Oculus Quest向けアプリの開発手順の説明を行います。(他のプロジェクトでも手順は基本同じ)


ちなみにユニティちゃんライブステージとは以下の動画の事で、



なんと、プロジェクトファイル一式が公開されていたりもするのです!



導入も簡単で上記サイトからプロジェクトをダウンロードし、



f:id:kan_kikuchi:20190623093220p:plain
f:id:kan_kikuchi:20180528211616j:plain
f:id:kan_kikuchi:20190623093232p:plain


ダウンロードしたプロジェクトをUnityで開き、ScenesにあるMainというシーンを再生するだけで

冒頭の動画と同じものが開始されます。


f:id:kan_kikuchi:20190623093249j:plain
f:id:kan_kikuchi:20180528212010j:plain

f:id:kan_kikuchi:20160727134802p:plain
この記事はユニティちゃんライセンス条項の元に提供されています。


Oculus Quest向けにビルド

Oculus QuestはAndroidで動いてるのですが、Androidでビルドするためには色々準備が必要なので、

Androidでビルドした事がない場合は、以下のページを参考に先に準備を済ませてください。



Androidの設定が済んだら、ユニティちゃんライブステージのPlatformをAndroidにします。


f:id:kan_kikuchi:20190623094252j:plain
f:id:kan_kikuchi:20190623094258p:plain


また、PlayerSettingsのOther Settingsにある

Minimum API LevelをAndroid 4.4 ‘KitKat’ (API level 19)に変更、

同様にColor SpaceもGammaに変更、


f:id:kan_kikuchi:20190623094539p:plain
f:id:kan_kikuchi:20190623094554p:plain


さらにXR SettingsのVirtual Reality Supportedを有効にし、Oculusを追加する必要もあります。


f:id:kan_kikuchi:20190623094606p:plain


また、Oculus Questで見た時に不具合が出るので、

UnityCanStage/Prefabs/Main Camera RigのPostProcessing Behaviourを無効にしましょう。

f:id:kan_kikuchi:20190623104141p:plain
f:id:kan_kikuchi:20190623104152p:plain


最後にTexture CompressionをASTCBuild SystemをInternalにすればビルドの設定は完了で、

(ついでにCompression MethodもLZ4にするとアプリを圧縮出来ます)

後はBuildボタンを押せばapk(実行ファイル)がビルドされます。


f:id:kan_kikuchi:20190623094745p:plain


なお、今回は先程のMainシーンだけを追加してビルドしました。


Oculus Questにインストール

apkをビルドしたら、Oculus Questにインストールしたいわけですが、

その前にOculus Questを開発者モードにする必要があります。


開発者モードはOculusアプリのその他の設定から有効に出来ます。

f:id:kan_kikuchi:20190627085615p:plain
f:id:kan_kikuchi:20190623095947p:plain
f:id:kan_kikuchi:20190623095955p:plain


あとはUSBケーブルでPCと繋いでAndroidのスマホと同じ要領でapkをインストールします。

なお、インストールの仕方は先ほどのAndroidの設定ページにあります。



また、PCと繋いだ時にOculus Quest側(PC側ではなく)に許可しますか?(Allow USB debugging)

みたいなメッセージが出るので注意が必要です。


ちなみに自分でインストールしたアプリは提供元不明の欄に表示されます。


f:id:kan_kikuchi:20190623104118p:plain


特にプログラム等は変更していないのに、

この状態で既に首を回して周りを見渡す事が可能ですし、

自分が移動すればVR内でも移動出来るようになっています……!

(ただし、カメラの位置は自動で切り替わる状態)





Oculus Integration

一応、Oculus QuestでUnity製アプリを動かすという目的は果たしたんですが、

ついでにOculus IntegrationというOculus公式から出ている無料のアセットの紹介もしておきます。

ちなみにこれは楽にOculus Quest周りの実装が出来るという優れモノです!



なお、Oculus IntegrationはOculus Quest以外にも、

Oculus GoやRift、Touch、Gear VRにも対応してるらしいですし、

Steam(VIVEとかも)でもそのまま使えるらしいです。(未確認)


Oculus Integrationはインストールしたら、PrefabがOculus/VR/Prefabに追加されるので、

カメラ(OVRCameraRig)を設置後、その下にコントローラー(OVRControllerPrefab)を左右分配置します。

f:id:kan_kikuchi:20190623115251p:plain


カメラ設置時にOVRManagerの設定をQuestにし、

f:id:kan_kikuchi:20190623115331p:plain


配置座標も調整します。(初期座標だとユニティちゃんと被るので)

f:id:kan_kikuchi:20190623115403p:plain


また、左側のコントローラーの設定も変更しておきます。

f:id:kan_kikuchi:20190623115322p:plain


あとは、元からあるカメラを無効にするために、

UnityChangeStage/Prefabs/Main Camera Rigの

Camera SwitcherとCamera Positionsを無効にします。

f:id:kan_kikuchi:20190623104141p:plain
f:id:kan_kikuchi:20190623115354p:plain


さらにコントローラーで移動するため以下のようなスクリプトを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;
  }

}

f:id:kan_kikuchi:20190625065756p:plain


これを実際にOculus Questで動かしてみたのが以下の動画になります。





おわりに

紹介した通りUnityでOculus Quest向けアプリを開発する事自体はそこまで難しくありませんが、

Oculusの審査は色んな意味でかなりキツく、



そもそもQuestはリリースするアプリを絞ってるようなので、



基本リリースは出来ない(特に個人開発では)と考えた方が無難です。


もし、どうしてもVRゲームをリリースしたいという場合は

審査が丁寧かつ優しく、ライバルも少ないSteamをオススメします。