はてなブログに投稿したものを転載しました。
前回
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に投稿することが出来る
-
ユーザーはアプリ内で友人を招待し一緒にゲームをプレイできる
-
ユーザーはアプリ内で音声通話をすることが出来る
-
ユーザーはアプリ内で世界中のユーザーとマッチングし一緒に遊ぶことが出来る(Dead and Buriedや、Bigscreen、Oculus Venueをイメージすると良いかもです)
これ以外にも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機能について書いていこうと思います。