OculusRift向けにリリースしていたMakeboxをHTC Viveに対応し、Viveportでリリース対応したときのメモ。
既に作っているVRアプリをViveportでリリースしたい人は参考にしてみてください。
Makeboxとは
ViveportにてMakeboxをリリース
Makeboxは簡単にVoxelモデリングができるVRアプリケーションです。
Do you miss building blocks? Create 3D models with virtual blocks with #Makebox. New on #Viveport: https://t.co/ixbwTqJhfX pic.twitter.com/Qcyw1i0xkS
— Viveport (@Viveport) 2017年5月11日
ダウンロードはこちらから
【本題】Viveportへの配信手順
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. 申請する
dashboardから申請します。