Oculus
OculusRift
OculusGo
OculusPlatform

はてなブログに投稿したものを転載しました。

前回

OculusRoomsみたいなアプリを作りたくて、OculusPlatformを使ってみようとなったいきさつを書きました。

OculusRoomみたいなアプリを作りたい - 海外で生活したいXRエンジニアのブログ

今回はOculuPlatformのことはじめを書いていこうと思います。

概要

Introduction to the Platform SDK

The Platform SDK contains features that you can use to create engaging and social game experiences.

ドキュメントによると、OculusPlatformにはソーシャルゲームを作る事が出来る機能が含まれているようです。

使ってみての私の理解は、
OculusPlatformはBaaS(Backend as a Service)だと思っています。

本来サーバーが必要な部分をOculus側が用意してくれていて、機能ごとにAPIが用意されていて、

開発者は必要なAPIを利用するコードを書くだけで、ソーシャルVRを実現できる。

そのAPIを叩きやすくしたものが、OculusPlatformSDK。という認識をしています。

OculusPlatformの機能

OculusGo、特にOculus Roomsをイメージすると分かりやすいかもです。

  • ユーザーはアプリ内で写真を撮りFacebookに投稿することが出来る

    Sharing

  • ユーザーはアプリ内で友人を招待し一緒にゲームをプレイできる

    Rooms

  • ユーザーはアプリ内で音声通話をすることが出来る

    Voice Chat (VoIP)

  • ユーザーはアプリ内で世界中のユーザーとマッチングし一緒に遊ぶことが出来る(Dead and Buriedや、Bigscreen、Oculus Venueをイメージすると良いかもです)

    Matchmaking

これ以外にもOculusが用意してくれている機能をふんだんに使えます!

もちろん、OculusPlatformの機能を使用しなくても出来る機能はあると思います。

OculusPlatformの良いところ

通信をする相手を指定する際にOculusアカウントを簡単に使えるのは便利です。

多分他のネットワークライブラリなどを使う際には、通信する相手を指定するのはちょっと面倒、か、ユーザーにIDを打たせるなどのUIを与えてしまいそうな気がしました。

OculusPlatformの注意点

Oculusデバイスのみしか使えません。(OculusRift, GearVR, OculusGo, OculusQuest...)

Oculusデバイスのみを考えれば良くなるので私は良いな。と思ってました。

が、既存のマルチプレイのゲームをVR化したい、なんて時は使いづらいというかいらないですよね。

でも、そんな人でもOculusStoreに出したいなら、

絶対にやらなきゃいけない事があります。

Entitlement Checkは必須

https://developer.oculus.com/documentation/platform/latest/concepts/pgsg-unity-gsg/

Verifying that the user is entitled to your app is required to sell an app on the Oculus Store.

OculusStoreにアプリを売り出すには、提出するアプリのユーザーが、そのアプリを使う・持つ資格があるか(entitled)を検証する必要があるそうです。

なので、OculusPlatformの機能を使わなくとも、Storeに出したいなら
EntitlementCheckは必須です。

OculusPlatform使ってみる

最初のセットアップは今回ざっくり書きます。

まずはOculusのOculus Developer Dashboardからアプリを作成します。

作った際のappIDというものを控えておく。

参考

https://developer.oculus.com/distribute/latest/concepts/publish-create-app/

↑のCreating an App Page参照

次に、Unityのセットアップをします。

UnityのAssetStoreからOculusIntegrationをインポート。

Unityの上のメニューから、OculusDashboardで作ったアプリのappIDを記述する。

参考

https://developer.oculus.com/documentation/platform/latest/concepts/pgsg-unity-gsg/

↑のConfigure Your Development Environment

かなり飛ばしましたが、これでOculusPlatformを使う下地は整いました。

EntitlementCheck

何か一つGameObjectを作成し、Startなどに下のメソッドを書きましょう。

using Oculus.Platform;

Start()
{
        // Oculus.Platform.Entitlementsのメソッドを呼ぶ
        Entitlements.IsUserEntitledToApplication().OnComplete(IsEntitledCallback);
}

Entitlements.IsUserEntitledToApplicationで、↑で設定したappIDに紐づいたアプリに資格があるかを検証します。

そして検証した結果が、IsEntitledCallback
にMessageとして渡されます。

このCallbackは自分で記述する必要があります。

void IsEntitledCallback(Message msg)
{
    if (msg.IsError)
    {
        // EntitlementCheckに失敗した場合、msg.IsErrorがTrueになる
       // ①
        return;
    }
        // EntitlementCheckが成功
        // ②
}

1番について。

このエラーをハンドリングするようドキュメントにはあります。

また、アプリを終了するよう促す文言もありました。

You may not allow the user to proceed in your app after a failed entitlement check.

Sampleシーンでは、メソッドを呼び、そこでUnityEngine.Application.Quit()を実行し、アプリを強制終了していました。

2番について。

OculusPlatformを使って実行したいような処理を記述します。

例えば、アプリを使っているユーザーの情報を取得するメソッド

Users.GetLoggedInUser().OnComplete(GetLoggedInUserCallback);

ここのCallbackは割愛しますが、さっきと同じようにMessageをハンドルする処理を書くのみです。

次回

今回はここまでとします。

次回は、私はこれでも失敗したので、OculusDashboardの設定や、Rooms機能について書いていこうと思います。