- 2017/08/19 【Unity】VRレーザーポインター(ビーム)を作る
- 2017/08/18 【Unity】GearVR アプリを Oculus Store に申請する(要件・仕様の概要)
- 2017/08/17 【Unity】GearVR アプリをビルドする
« prev next »
【Unity】VRレーザーポインター(ビーム)を作る 
2017/08/19 Sat [edit]
あくまで一例だが、簡単なレーザーポインター(ビーム)の実装方法を書いておこう。これは実際に私の作ったアプリに使っているものと同じだ。フリーなのでインストして試してみるのも良いだろう。
|
はじめに大まかに仕様的なものを説明しておくと、今回の実装方法は「レーザーの発射位置(Anchor)から指している位置(Target)に向かってラインレンダラ(Line Renderer)で線を引く」という非常に簡単なものである(笑)。なので例として GearVR コントローラを使っているが、たぶん他のコントローラでも移植はそう難しくはないだろう。また SDK 依存を減らすためにも、レーザーを描く部分とそれを SDK(ここでは Unity 公式の VRSample)で使う部分を分けて書いておいた。レーザーで指すだけという最低限の機能しか付けてないが、コードの内容を理解すれば、他の SDK やコントローラでも簡単に応用できるだろう。
また、今回は Oculus Utilities 1.16.0-beta を使用することにおいて、Unity2017.1f03 でやってみたら色々エラーが出るようなので、Unity 5.6.2p3 を使っている。なので自力で修正、または今後のバージョンアップで修正されたのなら、細かい仕様が変わってしまっている恐れがあるので、適宜置き換えて考えて欲しい。
Oculus Utilities v1.27.0, VRSample 1.4, Unity2018.1.8f1 でデモシーンをパッケージ化したものを用意しました(Unity2017.3.0f3, Unity2017.4.2f2, Unity2018.1.8f1 で動作確認済み。簡単な仕様なので他のバージョン・環境でも大丈夫だと思う)。
とりあえず試したい方は Google Drive からダウンロードすることもできます(名称・構成などは記事とは多少異なってますが内容は同じです)。
また、流用・改変なども自由にやって貰って構いません。
■GearVR コントローラでレーザーポインタを使う
■VRStandardAssets(VRSample)を使ってレーザーポインタでアイテムをクリックする
(※) Unity 5.6.2p3 / Windows10(x64) で確認
■レーザー(ビーム)ポインタをラインレンダラで描く
using UnityEngine;
/// <summary>
/// LineRenderer によるレーザーポインタ
/// 2017/8/21 Fantom (Unity 5.6.2p3)
/// http://fantom1x.blog130.fc2.com/blog-entry-259.html
///(使い方)
///・空の GameObject にアタッチし、LineRenderer を追加する(線の幅[Width:0.005くらい]やマテリアル・色も設定する)。
///※LineRenderer のマテリアルを「Sprites-Default」などアルファが利くものにし、色のアルファを設定すれば半透明レーザーにできる。
///※Use World Space は true である必要がある(デフォルト値)。
///・インスペクタで Anchor にコントローラなどの GameObject をセットする。
///・認識させるオブジェクトにコライダを追加する。
///(仕様説明)
///・anchor → target へ LineRenderer で線(レーザー)を引く。
///・LineRenderer は厚さのないテープのようなものなので(ただし常にカメラの方を向いている)、カメラ位置とanchorが同じで、targetが真正面方向だと見えない(故にanchorのY軸をずらせば見える)。
///・外部の Raycaster で判定をするときは shotRay をオフにして、target に指す位置を入れる。
///・shotRay がオンのときは anchor 位置から anchor.forward 方向へ Ray を飛ばし、ヒットしたオブジェクトの transform が target に入る(ヒットが無いときは null)。ヒットした位置ではないことに注意(ヒットした位置は RaycastHit.point で取得できる)。
/// </summary>
public class LaserPointer : MonoBehaviour
{
public bool IsActive = true; //稼働フラグ
public float defaultLength = 0.5f; //ヒットなしのときのレーザーの長さ
public bool shotRay = true; //Ray を撃つ(false のときは target に指す位置を入れる)
public float rayLength = 500f; //Ray の長さ
public LayerMask rayExclusionLayers; //Ray 判定を除外するレイヤー
public Transform target; //指す位置(shotRay=true のときはヒットしたオブジェクトの transform が入る)
public Transform anchor; //発射位置(コントローラの位置)
public LineRenderer lineRenderer; //レーザーを描画するラインレンダラ
// Use this for initialization
void Awake()
{
if (lineRenderer == null)
lineRenderer = GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
if (!IsActive)
{
lineRenderer.enabled = false;
return;
}
if (shotRay)
{
Ray ray = new Ray(anchor.position, anchor.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, rayLength, ~rayExclusionLayers))
{
target = hit.transform;
DrawTo(hit.point); //ヒットした位置にしたいため
return;
}
target = null;
}
if (target != null)
DrawTo(target.position);
else
DrawTo(anchor.position + anchor.forward * defaultLength); //コントローラの正面方向へ一定の長さ
}
//レーザーを描く
void DrawTo(Vector3 pos)
{
lineRenderer.enabled = true;
lineRenderer.SetPosition(0, anchor.position);
lineRenderer.SetPosition(1, pos);
}
}
使い方は空の GameObject にこのスクリプトをアタッチし、更に「Line Renderer」を追加する(インスペクタの一番下にある「Add Component で「LineRenderer」を入力すると楽)。Line Renderer を追加したら、インスペクタで線の幅(Width)を 0.005 くらいにしておくと良い。またマテリアル・色はデフォルトでも構わないが、半透明レーザーにしたいなら、アルファの効くマテリアル(例えば「Sprites-Default」など)にし、色の設定でアルファを 200 くらいにしておくと良いだろう。線の太さの変化やグラデーション変化を加えても良い。これらは任意で構わない。ただし「Use World Space」(位置指定を World Space にする)だけは true にしておく必要がある(デフォルトでは true になっている)。
あとはインスペクタで「Laser Pointer」の「Anchor」にコントローラなどレーザーを発射するオブジェクトをヒエラルキーからドラッグ&ドロップなどでセットするだけだ。

オブジェクトの判定方法はコントローラから前方に Ray を飛ばして、ヒットしたオブジェクトを取得するだけのもので(target にその transform が入る)、特に何の機能も付いてない。レンスポンスなどは何らかの SDK などを使用することになるだろう。なお、ヒットさせたいオブジェクトにはコライダがアタッチされてる必要がある。
1つ注意点としては、Line Renderer は厚さのないテープのようなものなので(ただし常にカメラの方を向いている)、カメラ位置とレーザー発射位置(Anchor)が同じで、かつ指す位置(Target)が真正面方向だと Gameビューでは見えないことだ。要するにエディタ上で初期位置がすべて (0, 0, 0) のようになってると見えないので、デバッグ用に表示したいなら、コントローラ等のY軸をずらせば見えるようになる(Sceneビューでは角度を変えれば見える)。実機ではコントローラは普通見下ろす感じになるので、初期位置が(0, 0, 0) でも特に問題はない(手の位置と連動して Transform が変わる)。
■GearVR コントローラでレーザーポインタを使う
では具体的に Oculus Utilites(掲載時点:v1.16.0-beta) を使って、GearVR コントローラでレーザーポインタを使う方法をやってみよう。Oculus Utilites 自体のインポートからはじめるなら「GearVR ビルドをする」の記事を参照して欲しい。
サンプルとしてシーン「Assets/OVR/Scenes/GearVrControllerTest」を開いてみよう。複製したものを使っても良い。このサンプルはビルドすればそのまま GearVR コントローラが使えるが、このコントローラからレーザーが出るようにする。設定は前述したインスペクタのようにすれば良い。とりあえず右手のコントローラを「Laser Pointer」の「Anchor」にセットしよう。ヒエラルキーとインスペクタでは以下のような感じになる。

セットアップが済んだら、あとは「GearVR ビルドをする」と同じように「Build Settings」でこのシーンを追加して apk を出力するだけだ。実機で動作を確認してみよう。
|
■VRStandardAssets(VRSamples)を使ってレーザーポインタでアイテムをクリックする
次に何らかの SDK を使ってレーザーポインタでインタラクティブな動作をやってみよう。今回は公式の VRSamples を使うことにする(※VRSamples は完成プロジェクトなので、インポートすると現在のプロジェクトを書き換えてしまうので注意。別の新規プロジェクトにインポートする方が良い)。と言ってもレティクル(視点ポインタ)などのUIや Raycast でのオブジェクトの判定は他の SDK でも同じようにあるハズなので、一部置き換えれば移植は簡単だと思う。
●VRStandardAssets(VRSamples)でレーザーポインタを使う
using UnityEngine;
namespace VRStandardAssets.Utils
{
/// <summary>
/// VRSample の VREyeRaycaster や Reticle(使用するのはUIの位置)を LaserPointer.target に入力する。
/// </summary>
public class VRLaserPointer : MonoBehaviour
{
public LaserPointer laserPointer; //レーザーの描画
public VREyeRaycaster eyeRaycaster; //Rayを発射してオブジェクトを判定する
public Transform guiReticle; //レティクルなどのUI
// Update is called once per frame
void Update()
{
if (eyeRaycaster.CurrentInteractible != null)
laserPointer.target = guiReticle;
else
laserPointer.target = null;
}
}
}
これは VRStandardAssets(VRSamples) の機能を前述の「LaserPointer」に橋渡しするだけのスクリプトである。VRStandardAssets では「VREyeRaycaster」というスクリプトが Ray を発射し、「VRInteractiveItem」コンポーネントとコライダを持つオブジェクトを取得するという仕組みでインタラクティブ機能を実現している。VRStandardAssets に入っているプレファブの一部を利用して、ここまでのサンプルシーン「GearVrControllerTest」で、レティクル付きのレーザーポインタでオブジェクトをクリックできるように改造してみよう。少し面倒だが、以下の手順でセットアップしたものをプレファブ化しておけば使い回しも簡単にできる。
1.「Assets/VRSampleScenes/Prefabs/Utils/」にある「MainCamera」をヒエラルキーにドラッグ&ドロップしよう。ドロップしたらカメラ自体は元からある「OVRCameraRig」を使うので、カメラとその他必要ないコンポーネントを削除(Remove Component)する。具体的には「Camera」「GUI Layer」「Flare Layer」「Audio Listener」「VR Camera Fade」「Return To Main Menu」「VR Tracking Reset」を削除する。残ったのは「VR Eye Raycaster」「VR Input」「VR Camera UI」「Selection Radial」「Reticle」となるようにする。また「MainCamera」のタグを無くし、ついでに名前を変えておこう。ここでは「VR Eye」としている。あとヒエラルキーで「Fade Panel」も削除しておこう。

2.次に先に作った「LaserPointer」オブジェクトに「VRLaserPointer」をアタッチしよう。そしたらヒエラルキーからドラッグ&ドロップして図のようにセットアップする。「Shot Ray」をオフにするのを忘れずに。これで「VREyeRaycaster」に判定を任せ、ヒットしているときレティクルのUI までレーザーが引かれるようになる(ヒットしてないときは「Default Length」の長さになる)。

3.それとレティクル(視点ポインタUI)もセットアップしておく。ヒエラルキーで「VR Eye>VRCameraUI>GUIReticle」を展開して、「Image」をオンにし、「Color」をレーザーに合うように色を変更しておこう。また今回は使用しないが、必要なら更に展開して UISelectionBar(リングUI)の色も変えておいても良い。ここではリングUI は起動時には非表示にしたいので「VR Eye」に戻り「Selection Radial」の「Hide On Start」をオンにしておく。

※リングUI は起動時に非表示にする

4.「VR Eye」のセットアップができたら、このオブジェクトに先に作った「LaserPointer」オブジェクトをドラッグ&ドロップし、子要素にしよう。そしてこれをプロジェクトエクスプローラでプレファブ化しておく。

5.「VR Eye」のプレファブ化ができたら、ヒエラルキーにあるものとプレファブのものをそれぞれ「RightHandAnchor」「LeftHandAnchor」を展開した先にある「Model」(コントローラの3Dモデル)の子要素に配置しよう。ここに置いておくと、右手用・左手用コントローラを切り替えたとき、自動的にオン・オフされるので便利だ。またプレファブ化した方はヒエラルキー上の参照は外れてしまうので、「Laser Pointer」の「Anchor」だけ設定しておこう。ここでは左手用「LeftHandAnchor」以下にプレファブ化した「VREye」を子要素に置いたので、「Anchor」に「LeftHandAnchor」を設定している。また子要素にすると Transform の Position が再計算されるので、(0, 0, 0) になっていることを確かめよう。ずれてしまった場合は必ず修正する(※動作は正しくても見た目がおかしくなるため)。あと情報表示が邪魔なら「CenterEyeAnchor」以下の「Canvas」を消しても良い。

※Transform は必ず (0, 0, 0) にする

6.これで必要なセットアップは一通り完了したので一旦シーンを保存しよう。またヒエラルキーの「OVRCameraRig」を「OVRCameraRig Gear」とでもしてプレファブ化しておくと再利用が簡単になる。そしてインタラクティブなテストをするために「VRSamples」に入っているサンプルシーン「Assets/VRSampleScenes/Scenes/Examples/InteractiveItem」を開き、ヒエラルキーにある「Cube1」をプレファブ化しよう(3つあるがどれでも同じ)。プレファブ化したらシーンは閉じてしまって良いので(保存はしなくても良い:任意)、再びテストするシーン「Assets/OVR/Scenes/GearVrControllerTest」に戻って、ここに先ほどプレファブ化したインタラクティブなアイテム「Cube1」をいくつか置いておく。

7.最後にシーンを GearVR 用にビルドしてみよう(VRSamples をあとから追加インポートした場合はシーンがいくつか追加されているので全て削除し「GearVrControllerTest」だけビルドする)。レーザーポインタでオブジェクトを指したり、クリックしたりすると色が変化するハズだ(起動初期にコントローラが認識されないときは、Backボタンを短押しすると認識される)。これで簡単な機能だけだがとりあえず完成だ。インタラクティブなアイテムにはスクリプト「VRInteractiveItem」の他に「ExampleInteractiveItem」もアタッチされている。この辺りのソースを覗けば(イベントで色を変えてるだけ)、他のアイテムなどにも応用は可能だろう。
|
(※) Galaxy S7 Edge (Android 7.0) で確認
(関連記事)
【Unity】GearVR アプリをビルドする
【Unity】GearVR アプリを Oculus Store に申請する

この作品・コンテンツは『サファイアートちゃん ライセンス条項』の元に提供されています。
This work is provided under "SapphiArt-Chan License" agreement.
© SapphiArt inc /SCL
【Unity】GearVR アプリを Oculus Store に申請する(要件・仕様の概要) 
2017/08/18 Fri [edit]
せっかくなので試しにビルドした GearVR アプリを Oculus Store に申請してみたのでその記録。GearVR のアプリ申請は公式の Oculus デベロッパーサイトにドキュメントが掲載されているが、基本的に英語なので、google翻訳使いながらやるのは大変だった(笑)。いくつか日本語の pdf などもあったが、内容が少し古くなっていたので、現時点での方法を簡単にまとめておくことにした。今後も色々更新されると思うので、なるべく最新版を検索するようにした方がいいだろう。ちなみにデベロッパー登録から申請まで全て無料でできる。
今回は「GearVR 用にビルドする」と同じ方法で Android ビルドが成功した状態であることを前提とした申請方法・要件なので、ビルドからやる場合は前回の記事を見て欲しい。内容的には一部被る部分もあるが、ここでは主に公式の Oculus デベロッパーサイトからの最低限必要な部分だけの抜粋を中心に書いていこうと思う。
また、今回は Oculus Utilities 1.16.0-beta を使用することにおいて、Unity2017.1f03 でやってみたら色々エラーが出るようなので、Unity 5.6.2p3 を使っている。なので自力で修正、または今後のバージョンアップで修正されたのなら、細かい仕様が変わってしまっている恐れがあるので、適宜置き換えて考えて欲しい。
■GearVR アプリの Oculus Store 申請要件・仕様の概要
■提出用 apk をビルドする
■提出用 apk をアップロード→申請する
(※) Unity 5.6.2p3 / Windows10(x64) で確認
■GearVR アプリの Oculus Store 申請の大まかな流れ
古い資料を見ると以前は必要なアセット等をストレージに集めて、サポートにメールなどする必要があったようだが、幸いなことに現在ではデベロッパーサイトで完全に自動化されている。なので、非常に大まかな流れを言えば、以下のようになる。
1.申請用の apk を作成する。
2.デベロッパーサイトの「Manage」(アプリ管理ページ)で必要なアセット(アプリも含む)をアップロードする(※デベロッパー登録が必要:無料)。
3.管理ページでの自動チェック(アセットが揃っている、アプリの自動プレビュー通過)が済んだら、Oculus Team にレビュー申請する(すべてが完了したら「Submit For Review」が押せるようになる)。
4.申請後はしばらく審査待ちになる(編集はロックされる。最大3週間とある)。要件を満たしてない場合、メールでその旨が送られて再度「編集→申請」できるようになる。
5.最終審査をパスしたら、今度はリリース待ちになる(リリース日は後日メールで送られてくる)。
(参考)
・Lifecycle of an Oculus VR App
これらの手順は他のストアなどでもそれほど変わらないと思う。次にその必要な要件(仕様)を簡単にまとめておこう。
■GearVR アプリの Oculus Store 申請要件・仕様の概要
ここでは仕様的なものの中で重要なものを一覧としてまとめておく。大まかには技術的なものと、必要なアセット(主にストア用画像)があるが、細かい内容は公式ドキュメントや pdf に書かれているので、簡単に目を通しておくと良いだろう。
●技術的な仕様
・Android の keystore(署名)がされていること(Unity のデバッグ用は不可)。
・「Tools>Oculus>Create store-compatible AndroidManifest.xml」(※掲載時点:Oculus Utilities v1.16.0)で正しく「AndroidManifest.xml」が作成されていること。
・Back キー(Escape キー)が「0.75秒以上を長押し、それより短い場合は短押し」になっていること。そして長押しのときユニバーサルメニュー(Unity内では何もしなくて良い)、短押しのときは1つ階層(シーン等)を戻る動作、階層ルートでは「Exit to Oculus Home」の確認画面(ダイアログ)を出すこと(Oculus Utilities に入っている「OVRPlatformMenu.cs」を使うなど。自作ダイアログでも動作さえ正しければOK)。
・音量ボタンで大小を操作できること(※Oculus SDK を使っている場合は何もしなくても機能する)。
・ホーム長押しでコントローラのリセンターが機能すること(※Oculus SDK を使っている場合は何もしなくても機能する)。
・スプラッシュ画面は4秒以内(それ以上になる場合は進捗を付ければOK)。
・apk は 500MB 以下。
※他には「スリープに入らないようにする(Unityを使っている分には何もしなくて良い)」「コントローラは左右どちらでも同じように動作」「60fps動作」「発熱停止しないで45分動作」など細かいことも書かれているので一度確認しておこう。しかしこの辺りはベストを尽くせばそれほど厳密ではないっぽい。
(参考)
・Gear VR Technical Requirements
・Uploading Gear VR Apps
●提出するアセットの仕様(※画像のサイズなど)
(Require:必須)
・Icon : 512x512 px(※背景は透過せず、角丸にしない=正方形のみ)
・Logo Transparent : 360~9000x1440 px(※背景は透過させる)
・Cover Landscape : 2560x1440 px(※下360px がストアのオーバーレイ範囲なので、ロゴを置かない)
・Cover Portrait : 1008x1440 px(※下360px がストアのオーバーレイ範囲なので、ロゴを置かない)
・Cover Square : 1440x1440 px(※下360px がストアのオーバーレイ範囲なので、ロゴを置かない)
・Small Landscape : 1080x360 px [※VR Landscape とも書いてある]
・Hero Art : 3000x900 px (※幅:540+1920+540=3000 px, ロゴを置くときは中央に置く)
・Screen Shots (5枚) : 各 2560x1440 px
(Optional:無くても可)
・Gallery Video : 最小 1280x720 px
└Video Cover Art : 2560x1440 px
・Cubemap : Cubemap - 12,000 x 2000px (※幅:2000x6枚=12000 px [※ツールあり。以下のURL参照])
(参考)
・Oculus Store Art Guidelines (pdf)
・OVRCubemapCaptureProbe(Oculus Utilities for Unity)
・Cubemap Viewer
■提出用 apk をビルドする
apk の作成については前回の「GearVR 用にビルドする」を見て欲しい。ここでは申請要件・仕様を満たしていることを前提としてアップロードすることとする(満たしていない場合は自動チェックでリジェクトされる)。特に apk について重要な部分は以下のことと考えて良い。
・「AndroidManifest.xml」の属性が正しく設定されているか。
・「Android アプリケーションの署名」が正しく行われているか。
(参考)
・Application Manifests for Release Builds
「AndroidManifest.xml」の属性についてはドキュメントでは細かく指定されているが、Oculus Utilities(※掲載時点:v1.16.0) を使っている分にはメニューから「Tools>Oculus>Create store-compatible AndroidManifest.xml」を実行して自動作成すれば良い。すると「Assets/Plugins/Android/」以下に要件を満たした「AndroidManifest.xml」が作られる。
※ビルドすると警告「No activity found in the manifest with action MAIN and category LAUNCHER.Your application may not start correctly.」が出るが、Oculus Homeから起動するため無視して良い(=端末のランチャーから起動できなくなる)。
※再びデバッグなどで端末のランチャーから起動したい場合は、生成された「AndroidManifest.xml」を削除するか、リネームなどしてビルドすれば、通常起動できるようになる。
「Android アプリケーションの署名」については、GearVR というより、Androidアプリの仕様なので、公式のドキュメントを参照して欲しい。設定は「Edit>Project Settings>Player」から「Publish Settings」になる。もちろん「Other Settings」内の「Identification>Package Name」はアプリ固有IDとなるので忘れずに(これも Androidアプリの仕様)。
(参考)
・アプリの署名

●Package Name は世界で唯一のアプリ固有IDとなるので、ドメイン名(任意)も入れるのが良い。

この他にも「提出用ビルドはOSIGファイルを取り除くこと推奨」とも書いてあるが、実際にはリリース時に自動で削除されるようなので、そのままでも構わない(審査には引っかからない)。
■提出用 apk をアップロード→申請する
あとは完成した apk や画像アセットなどをデベロッパーサイトにアップロードしよう。管理ページには他にもアプリの説明(ローカライズも含む)や利用規約/プライバシーポリシー、年齢レーティング、価格設定、ソーシャルメディアでのアプリの映像を共有/ストリーミング許可など色々項目があるが、基本的にはすべての項目(Required だけで良い)を入力・設定すれば、Oculus Team へのレビュー申請となる。apk 自体の仕様などはアップロードやプレビューでも自動で判定してくれるが、機能的なもの(Back キーの動作とか)は一度申請してから、要件を満たしていなければリジェクト→修正要項がメールで送られてくる。メールはすべて英語だが、詳しく書かれているので、google翻訳でも使えば十分にわかるハズだ。以下には簡単な手順と概要だけを書いておこう。
1.デベロッパーサイトにログインしたら上部のメニュー「Manage」を押す。
2.はじめての場合は「組織名(Create New Organization)」を聞かれるので入力する(この名前がメーカー名としてストアに表示されるので注意)。
3.管理ページ内にある「Create New App」を押して、「プラットフォーム」「アプリ名(※後で変更できる)」を入力する。完了したら AppID など色々な情報が出るが、ページの上部のアプリ名をクリックすると、進捗が表示されるので「Build」を押せば、apk ファイルをアップロードできる画面になる(初回はページの一番下にある「Upload Build」を押す)。

4.アップロードしたいチャンネルの右にある「…」を押すと「Upload New Binary to ~」が出るのでクリックし、説明が出たら「Choose File」 で apk をアップロードする。

※チャンネルにはアルファ版、ベータ版、テスト版など色々な状態のものをアップロードできるが、最終的には STORE に移すことになるので、はじめてアップロードするときは STORE に直接アップロードしても良い。
5.アップロードしたファイルの自動チェックが終わったら「Continue」ボタンが出るので、他の残りの要項も埋めていく(「Require」だけでも可)。
6.ページに表示されている進捗を見て、すべてが揃ったら Oculus Team に申請する(「Submit For Review」が押せるようになる)。最大3週間かかるとあるが、機能的な要件を満たしてないものはすぐにリジェクトされるので、その場合は修正したビルドを再度アップロード→申請する。
※ちなみに、apk をアップロードした後は実機:GearVR 内の Oculus Home で実際のプレビューを見ることができるようになる。例えば説明の「Short Description」はアプリの詳細から「説明」の項目に表示されていることがわかる。アップロードした画像なども「ギャラリー」の項目を見れば確認できる(ビデオもここで再生できる)。


※Cubemap は試してないが、他のアプリを見るとインストール前に自分の回りの背景が変わるのがあるので(メーカーものは多い)、その背景をアップロードするものだと考えて良い。Oculus Utilities の「Assets/OVR/Prefabs/」にあるプレファブ「OVRCubemapCaptureProbe」をシーンにおいて「F8」キーでキャプチャすることもできるので、試してみるのも良いかも(私は面倒くさかったので提出してない(笑))。
(参考)
・OVRCubemapCaptureProbe(Oculus Utilities for Unity)
・Cubemap Viewer
提出し終わったらあとは審査が終わるまで待つしかない(編集はロックされる)。なお、私の場合、年齢レーティング(IARC)の正式な承認(?)(「証明書の恒久的な記録のURL」とメールに書かれている)は約1週間後に送られてきた。Oculus Store の審査自体は1回リジェクト、再申請2日目で審査を通過したが、リリース待ちは13日ほどかかった(土日を含む)。また個人かつ FREE アプリだったので、法人や決済関連があるのならもっと時間はかかるのかも知れない。気長に待つと良いだろう。
(関連記事)
【Unity】GearVR アプリをビルドする
【Unity】VRレーザーポインター(ビーム)を作る

【Unity】GearVR アプリをビルドする 
2017/08/17 Thu [edit]
試しに以前作った Google Cardboard 用アプリを GearVR にしてみたのでその記録。GearVR の作り方は公式の Oculus デベロッパーサイトに多くのドキュメントが掲載されているのだが、なにせほとんどが英語なもので、google翻訳使いながらやるのはとても面倒だった(笑)。日本語のサイトも色々あったけどね。ただ更新が早いので、申請要項などもそうだが、内容が少し古くなっていたので、現時点での方法を簡単にまとめておくことにした。SDKが更新されたらやり方も変わるので注意しよう。
|
今回は開発環境は整っていて、かつ Android ビルドができる状態であることを前提とした GearVR 用のビルドの方法なので、環境構築からやる場合は以下の参考URLなどを見て欲しい。内容的にはこれらと被る部分も多いが、ここでは主に公式の Oculus デベロッパーサイトからの重要な部分だけの抜粋を中心に書いていこうと思う。
(参考)
・Unity5でGear VR用アプリの開発方法
・UnityでGearVRアプリを作成する際の初期設定
・UnityでGear VR用アプリを作る(1) 環境準備とAndroidアプリの書き出し
・Oculus Unity Documentation Archive (※pdf をダウンロード)
また、今回は Oculus Utilities 1.16.0-beta を使用することにおいて、Unity2017.1f03 でやってみたら色々エラーが出るようなので、Unity 5.6.2p3 を使っている。なので自力で修正、または今後のバージョンアップで修正されたのなら、細かい仕様が変わってしまっている恐れがあるので、なるべく最新情報を検索してみた方が良いだろう。
■OSIG(署名)ファイルを作成する
■GearVR 用の BuildSettings
■GearVR 用の PlayerSettings
■GearVR 用の QulitySettings
■実機で試す
(※) Unity 5.6.2p3 / Windows10(x64) で確認
■Oculus Utilities をインポートする(※掲載時点:Oculus Utilities 1.16.0-beta)
まずは Oculus Utilities をダウンロードして、プロジェクトにインポートしよう。幸いなことに、以前は GearVR の機能を自分で実装する必要があったようだが、現在ではこのパッケージとSDK(後述する PlayerSettings)を導入すればほとんどの機能を自分で実装する必要がない。もし作成したアプリを Oculus Store に申請するなら、ほぼ要件を満たしているので、これを使わない手はない(笑)。
1.Unityパッケージ>Core Packages>Oculus Utilities for Unity 5 (※バージョンは掲載時点) をダウンロード。
※「I have read and agree to the terms of the EULA, 利用規約 and プライバシーポリシー」(規約に同意)をチェックすればダウンロードできるようになる。
※必要ならデベロッパー登録(アカウント作成)をしておいた方が良い。
2.インポートしてすぐにアップデートが促されたら「Yes」ボタンでアップデートする。その場合は、エディタの再起動も必要となる。


再起動したら、シーン「Assets>OVR>Scenes>GearVrControllerTest」を読み込んでみると良いだろう。ヒエラルキーにある「OVRCameraRig」が GearVR でのカメラやコントローラを扱う中心となるプレファブと考えて良い。「Assets>OVR>Prefabs>OVRCameraRig」にもプレファブはあるが、GearVR コントローラはセットアップされてないので、ヒエラルキーにあるオブジェクトを「OVRCameraRig Gear」とでもしてプレファブ化しておいた方が楽だろう。詳しい内容などは参考URLを見て欲しい。
(参考)
・Oculus Utilities for Unity
このシーンをビルドすれば GearVR コントローラの簡単なテストができる。しかしその前に実機でテストするためには Oculus 用の署名ファイルが必要だ。以下の方法で OSIGファイルを作成しよう。
■OSIG(署名)ファイルを作成する
実機でテストするには Oculus 用の署名ファイルが必要となる。それは端末ごとのIDとなるので、複数使う場合はそれら全ての署名ファイルを作る必要がある。しかし一度作ってしまえば、端末を替えない限りは別の開発アプリでも使えるので、作ったファイルは大切に保管しておこう。なお、アプリを Oculus Store に申請する場合は、提出用ビルドはOSIGファイルを取り除くこと推奨とあるが、どのみちリリース時に自動で削除されるようなので、そのままでも構わない(審査には引っかからない)。
(参考)
・Sign your App with an Oculus Signature File(Preparing for Mobile Development)
1.スマホ端末で Google Play から「SideloadVR(Alpha)」を端末にインストールする。
2.SideloadVR でメニュー(三本線)を開き、「View Device ID」を見る。
(参考)
・Device IDの取得とOculus Signature File(osig)の作成(Unity5でGear VR用アプリの開発方法)
3.この Device ID を「Oculus Signature File (osig) Generator」に入力して「Download File」ボタンを押せば、「oculussig_XXX」(XXX には Device ID が入る)ファイルがダウンロードされる。
※まだアカウントが無いときは、デベロッパー登録をする。
4.Unity エディタに戻り、プロジェクトエクスプローラで「Assets/Plugins/Android/assets/」フォルダを作成する(初期状態では「Assets/Plugins/」までしかない)。
5.作った「Assets/Plugins/Android/assets/」フォルダにダウンロードした「oculussig_XXX」(XXX には DeviceIDが入る)をインポートする(ドラッグ&ドロップで良い)。

なお、adb コマンドでやる場合は以下を参考にして欲しい。
・デバイスIDの登録(UnityでGear VR用アプリを作る(1) 環境準備とAndroidアプリの書き出し)
・adbコマンドについて(UnityでAndroidアプリをビルドするには)
・Oculus Signature File (osig) Generator(Instructions)
■GearVR 用の BuildSettings
先ほどのシーン「GearVrControllerTest」を保存したら、メニューから「File>Build Settings...」を開こう。ダイアログが出たら「Add Open Scenes」でシーンを追加して、「Platform」を「Android」に、「Texture Compression」を「ASTC」にする。このあたりの設定は以下の参考に載っている。設定したら「Switch Platform」を押して Android 用ビルドに切り替えよう。

(参考)
・Build Settings(Building Mobile Applications)
※「DirectoryNotFoundException: Directory 'Assets/Plugins/Android/assets' not found.」と出た場合は、フォルダ「Assets/Plugins/」(※初期状態)以下に「Android/assets」フォルダを作る必要がある。ここに OSIG(署名)ファイルを置く。
■GearVR 用の PlayerSettings
「Build Settings」ダイアログが開いている場合は「Player Settings...」ボタンを、閉じてしまった場合はメニューから「Edit>Project Settings>Player」で「Player Settings」を開こう。設定項目は色々あるが、ここでは必要な設定だけを書いておく。またあくまで推奨設定なので実際にはパフォーマンスが許すなら任意でも良いようだ。

●Other Settings
[Rendering]
・Multithreaded Rendering : オン
・Virtual Reality Supported : オン
・Virtual Reality SDKs に「Oculus」を追加する(複数で切り替える場合は一番上が優先になるが、使用しないなら削除(「-」を押す)しておいた方がビルドサイズが小さくなる)。
[Identification]
・Package Name : 任意のパッケージ名(※必須)
・Minimum API Level : 「Android 5.0 'Lollipop'(API Level 21)」にする。
[Configuration]
・Device Filter : 「ARMv7」にする(x86は使わないのでARMv7のみにするとビルドが速くなるそうだ)。
(参考)
Player Settings(Building Mobile Applications)
●Publishing Settings
※Oculus Store に申請する場合は、Android の Keystore も必要。
(参考)
・Sign your application with an Android Keystore(Building Mobile Apps for Submission to the Oculus Store)
・アプリの署名
■GearVR 用の QulitySettings
メニューから「Edit>Project Settings>Quality」で「QulitySettings」を開こう。Android の場合はデフォルトは「Simple」になっているのでクリックする(Default の▼で変更できる)。以下の設定もあくまで推奨設定なのでパフォーマンスが許すなら任意で良い。

[Rendering]
・Pixel Light Count : 1
・Texture Quality : Full Res
・Anisotropic Textures : Per Texture
・Anti Aliasing : 2x Multi Sampling (or 4x)
・Soft Particles : オフ
・Realtime Reflections Probes : オン
・Bilboards Face Camera : オン
(参考)
・Quality Settings(Building Mobile Applications)
※Anti Aliasing を 2x または 4x~ にすると警告「Warning! Using antialiasing on a mobile device may decrease performance severely. You can change the mobile quality settings in 'Project Settings -> Quality Settings'.」(モバイルではアンチエイリアス使うとパフォーマンス下がるよ)が出るが無視して良い。
■実機で試す
すべての設定が終わったら、再び「File>Build Settings...」を開き、今度は「Build」ボタンで実際にビルドしてみよう。できた apk ファイルを実機に転送してインストールすれば、端末のランチャーから起動できる(装着が促される画面「このアプリケーションを起動するには、端末をGearVRに挿入します」が出る)。ちなみに、転送する方法は USBデザリングや Google Drive などに置いてダウンロードする方法などがある。以下に参考URLを載せておこう。実際に起動してコントローラをいじってみると、画面に出ているパラメタが色々変化するハズだ(起動直後にコントローラを認識してなければ、Backキーを短押しすると認識できる)。OculusStoreに提出するときはマニフェストファイル(AndroidManifest.xml)や署名なども必要になるので、その場合はこちらも参考にして欲しい。
(参考)
・Galaxy S6のデバッグモードをオンにする(Unity5でGear VR用アプリの開発方法)
・提出用 apk をビルドする
(※実機では操作中にUIアイコンが見えているのだが録画はされないようだ)
|

※検索で「unitychan flyer」を入れてみると…

(関連記事)
【Unity】GearVR アプリを Oculus Store に申請する(要件・仕様の概要)
【Unity】VRレーザーポインター(ビーム)を作る

| h o m e |