Oculus Rift DK2で表示させたユニティちゃんを、できるだけそのままCardboardやTaoVisorで立体視してみます。
開発環境などは先のエントリを参照。
Durovis Dive Plugin
Durovis DiveというCardboardクローン的プロダクトがあり、そこでiOS/Android向けに簡単に立体視と視点のトラッキングを実現できるUnityプラグインが配布されています。
以下の手順で適用します。
- Dive SDKのページからプラグインをダウンロード(執筆時点のバージョンは2.0 r498)
- Assets -> Import Package -> Custom package...でインポート
- Project ViewのAssets/Dive/Dive_CameraをHierarchy Viewにドラッグアンドドロップ。従来のカメラを無効化(Inspectorでチェックをoff)
- Dive_CameraのTransformを適切に設定(Oculus Riftのときと同じ)
- スプラッシュスクリーンの表示が必須とのことなので、Assetsにある
Dive-Splashscreen.unity
をビルド対象に追加(File -> Build Settings...の"Scenes In Build"に追加)
Oculus Riftに比べて視野角が狭いので、外周の歪みも無い(無くていい)みたい。
Androidデバイス向けにビルドする
Androidデバイス向けのビルドを行ないます。
なお、動作を試すだけなら、Unity Remote 4が使えるはずなのですが、Android版とUnity 4.5.5では同期できませんでした。
ビルドの設定
- File -> Build Settings... を開き、Platformの"Android"を選択します
- Build Settingsの[Player Settings...]ボタンをクリックするとInspectorの表示が切り替わり、ここでアイコンなどを設定できます
- "Other Settings"に、"Bundle Identifier"、"Bundle Version"および"Bundle Version Code"の設定があります。"Bundle Identifier"の設定は必須です
- "Publishing Settings"に、apkに、署名するためのキーストアの設定があります。デバッグ証明書を使う場合はキーストア未選択のままでいいようです
- Unity -> Preferences... -> External Tools の"Android SDK Location"を設定(選択)します
- これで[Build]もしくは[Build and Run]ボタンでビルドできます(出力ファイルパスを聞かれます)
コマンドラインでビルド
AndroidアプリはUnity
コマンドで直接ビルドできないため、Unityプロジェクト内にビルドを実行するスタティックメソッドを作成し、それをコマンドラインから呼び出します。
ビルドメソッドの作成
まず、スクリプトの格納フォルダを作ります。Assets -> Create -> Folderでフォルダを生成。名前をEditor
に変更します(namespace UnityEditor
をエラーにしないために必須)。
続いて、Project ViewのEditor
フォルダを右クリック -> Create -> C# Scriptでスクリプトを生成します。名前は任意ですが、クラス名と一致させる必要があるのでここではBuilder.cs
としました。
using UnityEngine;
using UnityEditor;
public class Builder {
static void BuildAndroid(){
string[] scenes = {
"Assets/Dive/Dive-Splashscreen.unity",
"Assets/UnityChan/Scenes/UnityChan_hw.unity"};
string msg = BuildPipeline.BuildPlayer(
scenes,
"Build/UnityChanVR.apk",
BuildTarget.Android,
BuildOptions.None);
if(!string.IsNullOrEmpty(msg)){
throw new System.Exception(msg);
}
Debug.Log("Build completed ");
}
}
失敗時は例外をスローすることで、Unity
コマンドが終了コード1で終了します。
コマンドライン指定
次のコマンドで、Builder
クラスのBuildAndroid()
メソッドを実行できます。
$ /Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -logFile /dev/stdout \
-executeMethod Builder.BuildAndroid
なお、
- Unityは二重起動できないため、コマンド実行時Unityは落としておく必要があります(MonoEditorは起動していてok)
- 出力ファイルは上書きしてくれますが、必要なディレクトリ(上例ではBuildディレクトリ)はあらかじめ掘っておきます
-logFile /dev/stdout
を指定することで、通常コンソールに出力されるログを標準出力に出力できます
iOSデバイス向けにビルドする
iOSデバイス向けのビルド(正確には、iOS向けのXcodeプロジェクトの出力)を行ないます。
なお、動作を試すだけなら、Unity Remote 4を使うと便利です。
OpenDiveSensor.csの修正
そのままiOS向けビルドを行なうと、Assets/Dive/OpenDiveSensor.csでAndroidJavaObject
が見つからないというエラーが出ます。このオブジェクト宣言自体が不要なので*1以下は削除します。
AndroidJavaObject mConfig;
AndroidJavaObject mWindowManager;
Oculusパッケージをプロジェクトから取り除く
OculusUnityIntegration.unitypackageをインポートしている場合、それがシーンで使用されていなくてもビルドエラー*2が出るようです。iOSデバイス向けでは使用しないので、Project ViewのAssets/OVRを削除します。
ビルドの設定
- File -> Build Settings... を開き、Platformの"iOS"を選択します
- Build Settingsの[Player Settings...]ボタンをクリックするとInspectorの表示が切り替わり、ここでアイコンなどを設定できます
- "Other Settings"に、"Bundle Identifier"と"Bundle Version"の設定があります
- "Bundle Identifier"は、Info.plistの
CFBundleIdentifier
にセットされますが、末尾は${PRODUCT_NAME}
に置き換えられます - "Bundle Version"は、Info.plistの
CFBundleShortVersionString
とCFBundleVersion
の両方にセットされます
- これで[Build]もしくは[Build and Run]ボタンでXcodeプロジェクトを出力できます(出力ファイルパスを聞かれます)
コマンドラインでビルド
iOSアプリ(Xcodeプロジェクト)もUnity
コマンドで直接ビルドできないため、Unityプロジェクト内にビルドを実行するスタティックメソッドを作成し、それをコマンドラインから呼び出します。
ビルドメソッドの作成
Android向けに作成したBuilder
クラスに、BuildIos()
メソッドを追加します。
using UnityEngine;
using UnityEditor;
public class Builder {
static void BuildAndroid(){
(snip)
}
static void BuildIos(){
string[] scenes = {
"Assets/Dive/Dive-Splashscreen.unity",
"Assets/UnityChan/Scenes/UnityChan_hw.unity"};
string msg = BuildPipeline.BuildPlayer(
scenes,
"Build/UnityChanVRiOS",
BuildTarget.iPhone,
BuildOptions.SymlinkLibraries);
if(!string.IsNullOrEmpty(msg)){
throw new System.Exception(msg);
}
Debug.Log("Build completed ");
}
}
コマンドライン指定
次のコマンドで実行します。
$ /Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -logFile /dev/stdout \
-executeMethod Builder.BuildIos
Xcodeプロジェクトのビルド
生成されたプロジェクトは、Xcodeでビルドできます(Xcode 6.0.1で確認)。 Xcodeプロジェクトをコマンドラインでビルドするにはxcodebuildコマンドを利用できます。詳しくは『iOSアプリ テスト自動化入門』のChapter 6などを参照してください。
- 作者: 長谷川孝二
- 出版社/メーカー: 秀和システム
- 発売日: 2014/03/18
- メディア: 単行本
- この商品を含むブログ (1件) を見る
参考
Unity実践技術大全 (GAME DEVELOPER BOOKS)
- 作者: 菊田剛,只野顕二,桑原公一郎
- 出版社/メーカー: 秀和システム
- 発売日: 2014/03/29
- メディア: 単行本
- この商品を含むブログ (2件) を見る
- Unity マニュアル / Unity Manual > Advanced > コマンドライン引数 / Command line arguments
- Unity スクリプトリファレンス / Unity Script Reference > BuildPipeline.BuildPlayer
- Unityを自動的にビルドする設定にしたときのメモ
- Unity Editor 用のスクリプトが exe を作るときにエラーになる 凛(kagring)のUnity(とQt)勉強中ブログ
- TAKUMI on Twitter: "今更だけどDurovis Dive SDKってiOSビルドするとエラーでるのね。 OpenDiveSensor.csの45,46行目のAndroidJavaObjectのとこを#if UNITY_ANDROIDって囲えば解消。 Dive Boardにも載ってるんだから直そうよ。"
ライセンス
このコンテンツは、『ユニティちゃんライセンス』で提供されています