のしメモ アプリ開発ブログ

Unityアプリとかロボットとか作ってるときに困ったこととかメモ

Unityで作ったVRアプリをViveportで配信する手順

OculusRift向けにリリースしていたMakeboxをHTC Viveに対応し、Viveportでリリース対応したときのメモ。
既に作っているVRアプリをViveportでリリースしたい人は参考にしてみてください。

Makeboxとは

ViveportにてMakeboxをリリース
Makeboxは簡単にVoxelモデリングができるVRアプリケーションです。

ダウンロードはこちらから

【本題】Viveportへの配信手順

おおまかな流れ

1. 開発者登録する
2. SteamVRを入れる(SteamVR必須ではないかも?要確認)
3. DRM対応をする
4. 申請する
5. 配信される

ざっくりと説明していきます。

1. 開発者登録をする

Viveportの開発者登録ページはこちら。
http://developer.vive.com

ある程度、日本語にローカライズされているので、手順にしたがってdeveloper登録をしましょう。

2. SteamVRを導入する

MakeboxはOVRPluginでHMDを制御していましたが、Viveで動作させるためSteamVR Pluginを導入しました。
SteamVR Plugin
https://www.assetstore.unity3d.com/jp/#!/content/32647

3. DRM対応をする

Viveportにアプリを申請する際に、アプリが複製されて起動されないように対応する処理を入れないといけません。
OculusStoreでいうエンタイトルメントチェック的なやつですね。

今回はその処理をメモしておきます。(2017/5/4時点)

公式のAPI DRMのマニュアルはこちら
https://developer.viveport.com/documents/sdk/en/api_drm.html

流れとしては、以下になります。
(1) SDKのインポート
(2) アプリキーの取得
(3) コード書く
(4) 最初のシーンにオブジェクト配置

(1) SDKのインポート

DeveloperサイトのフッターにあるダウンロードからViveport SDK(Unity)をダウンロード。

ファイルを展開し、"viveport_sdk_unity.unitypackage"を対象のプロジェクトにインポートします。

(2) アプリキーの取得

Viveportにアプリを登録します。
その後、アプリのページ内のViveportリストに"Viveport ID"と"Viveport キー"の2つがあるのでこれをメモしておきます。

(3) コードを書く

ほぼ公式ドキュメントのままですがこんな感じでコードを設定してあげます。

    public class ViveportPlatformManager : MonoBehaviour
    {
        static string APP_ID = "{Viveport IDを入れる}";
        static string APP_KEY = "{Viveport キーを入れる}";

        private void Start()
        {
            Api.Init(InitStatusHandler, APP_ID);
        }

        private static void InitStatusHandler(int nResult)
        {
            Viveport.Core.Logger.Log("Init(): " + nResult);
            if (nResult != 0)
            {
                Viveport.Core.Logger.Log("Init setup error ...");
                // Handle error
                Application.Quit();
            }
            UserStats.IsReady(IsReadyHandler);
        }

        private static void IsReadyHandler(int nResult)
        {
            if (nResult != 0)
            {
                Viveport.Core.Logger.Log("Platform setup error ...");
                // Handle error
                Application.Quit();
            }
            Api.GetLicense(new MyLicenseChecker(), APP_ID, APP_KEY);
        }

        class MyLicenseChecker : Api.LicenseChecker
        {
            public override void OnSuccess(long issueTime, long expirationTime, int latestVersion, bool updateRequired)
            {
                Viveport.Core.Logger.Log("[MyLicenseChecker] issueTime: " + issueTime);
                Viveport.Core.Logger.Log("[MyLicenseChecker] expirationTime: " + expirationTime);
                Viveport.Core.Logger.Log("[MyLicenseChecker] latestVersion: " + latestVersion);
                Viveport.Core.Logger.Log("[MyLicenseChecker] updateRequired: " + updateRequired);
                // Do more things
        // 通過後の処理をかく
            }

            public override void OnFailure(int errorCode, string errorMessage)
            {
                Viveport.Core.Logger.Log("[MyLicenseChecker] errorCode: " + errorCode);
                Viveport.Core.Logger.Log("[MyLicenseChecker] errorMessage: " + errorMessage);
            }
        }
    }
(4) 最初のシーンにスクリプト配置

最初のシーンの任意のオブジェクトに作成したスクリプトをアタッチします。

これでビルドすればOKです。
ちなみにMakeboxではDRMでFailしたときにアプリを強制終了(Application.Quit())させていました。

4. 申請する

dashboardから申請します。

5. 配信される

申請が通ると配信されます。
審査期間はMakeboxの場合、だいたい1週間ぐらいでした。


以上になります。是非、ViveportでUnityアプリを出す際に参考にしてみてください。