Edited at

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機能について書いていこうと思います。