読者です 読者をやめる 読者になる 読者になる

脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Unityをコマンドラインからオプションを指定して起動する

Unity

通常Unityは立方体のUnityのアイコンをクリックして立ち上げるが、コンソールから実行するとコマンドライン引数としてオプションを指定することができる
Unity - マニュアル: コマンドライン引数

Windows環境の場合はコマンドプロンプトで以下のように実行する

起動

> cd "\Program Files\Unity\Editor"
> Unity.exe

ビルド

> cd "\Program Files\Unity\Editor"
> Unity.exe -quit -buildWindows64Player <pathname>
  • 64bit スタンドアロン Windows player をビルドする場合
  • quitをつけるとbuildが終わるとアプリを自動で終了する

オプションの指定

> cd "\Program Files\Unity\Editor"
> Unity.exe <option>
> Unity.exe -force-d3d11-no-singlethreaded ### example

ちなみにここで指定したオプションはビルド時には反映されないが、ビルドされたアプリケーションもコマンドラインから起動することで上記のオプションを指定することができる

> ${buildしたアプリ}.exe -force-d3d11-no-singlethreaded

AVProVideo/AVProWIndowsMedia/AVProQuickTime

Unity

AVProシリーズはプロダクトが色々あって当初結構混乱したのでまとめ

AVPro QuickTime

AVPro Windows Media

AVPro Video

その他AVPro

オールインワンのAVProVideoを対象デバイス毎にわけてお安くしたものが以下
(すべて$150)

  • AVPRO Video(Andorid)
  • AVPRO Video(iOS)
  • AVPRO Video(Windows)
  • AVPRO Video(OS X)

Unityでmp4の4K動画を再生する方法(AVProWindowsMedia)

Unity

AVProWindowsMediaでmp4の4K動画を再生できるようにする方法です

公式のドキュメントに方法があるので、それに沿って説明します。
http://downloads.renderheads.com/docs/UnityAVProWindowsMedia.pdf

Super High Resolution 4K / 8K Playback

f:id:portaltan:20160822130514p:plain

ここをざっくり訳すと...

高解像度の再生にはXVidかHapコーデックがいいよ。この二つは早いし、他のコーデックはCPUの負荷が高いからおすすめしないよ。

ただMP4に関してはちょっと別で、そもそも通常H.264は高解像度の動画再生には向かないんだ。でも高スペックなマシンなら動くよ。
もしあなたがどうしてもH.264を使用しないといけないのであれば、このReadmeのH.264のセクションを参照してみてね。軽くここで説明すると、そもそもDirectShowは通常1080p以上のH.264の再生はサポートしてないんだ。だから3rdParyのdecorderをインストールして、Codec Tweakerっていうツールでデフォルトで呼び出すCodecを変更するって流れだよ。
(詳しくはFAQセクションを見てね)

FAQ

で、FAQセクションを見てみると
f:id:portaltan:20160822131107p:plain

1. LAVっていうCodecをインストールする
2. Codec Tweakerっていうツールをインストールする
3. Codec Tweakerを起動して、Prefered Decoderを選択して、H.264の項目を"Microsoft"から"LAV Video"に変更する


実際にCodecTweakerを起動してPrefered Decorderを選択すると以下のような画面が出てくるので、H.264の該当の項目を変更します
f:id:portaltan:20160822131405p:plain

以上でmp4の4K動画が再生できるようになります。

C#でファイルの読み書きの方法

C#

Read

StreamWriter writer = new StreamWriter(path);
writer.Write(value);
writer.Close();
  • pathは保存したいファイルのパス
    • Unityとかだと『Application.streamingAssetsPath + "/" + filename』みたいな
  • valueは保存したいデータ

Write

StreamReader reader = new StreamReader(path);
string value = reader.ReadToEnd();
reader.Close();
  • 上記と同じ
  • ファイルが隠しファイル(Hidden属性をもっている場合)はReadはできるがWriteはできない

EasyMovieTextureで動画をポーズ/再開させる

VR Unity

前回のポストの続きになります
portaltan.hatenablog.com

前回は起動したら単純に一回だけ再生するというシンプルすぎるアプリでしたが、今回は自前のスクリプトを貼りつけて、ユーザの入力に応じてポーズなどの処理をできるようにしましょう

1. デフォルトのスクリプトの再生設定を削除

  • Sphere100のMedia Player CtrlのInspector上でStr File Nameの項目を削除します

(これで自動再生されなくなります)
f:id:portaltan:20160712145358p:plain

2. 自前のスクリプトの作成

  • 今回はEasyTest.csという名前にしました
using UnityEngine;
using System.Collections;

public class EasyTest : MonoBehaviour {
	public MediaPlayerCtrl EasyMovieTex;

	void Start () {
		EasyMovieTex.Load ("slider.mp4");
		EasyMovieTex.Play ();
	}
}

3. スクリプトをSphere100へ貼りつけます

  • EasyTest.csスクリプトをhierarchyビューのSphere100へD&Dで貼りつけます
  • Inspector上のEasyTest(Script)で、Easy Movie TexにSphere100をアサインします

f:id:portaltan:20160712150312p:plain

ここまでで以前同様に起動したら一回だけ再生する状態になりました

4. ポーズ処理の追加

再生中にスペースを押したらポーズし、ポーズ中にスペースを押すと再開するような処理をUpdate内に書いていきます

using UnityEngine;
using System.Collections;

public class EasyTest : MonoBehaviour {
	public MediaPlayerCtrl EasyMovieTex;

	void Start () {
		EasyMovieTex.Load ("slider.mp4");
		EasyMovieTex.Play ();
	}

	void Update () {
		if (EasyMovieTex.GetCurrentState ().ToString () == "NOT_READY") {
			Debug.Log ("Preparing");
		} else if (EasyMovieTex.GetCurrentState ().ToString () == "END") {
			Debug.Log ("Finished");
		}

		if (Input.GetKeyUp (KeyCode.Space)) {
			switch (EasyMovieTex.GetCurrentState ().ToString ()) {
			case "PLAYING":
				EasyMovieTex.Pause ();
				break;		
			case "PAUSED":
				EasyMovieTex.Play ();
				break;
			}
		}
	}
}

以上です。
最初の4行は再生の準備中と終了時にはログを表示させています

EasyMovieTextureでGearVR用の360動画アプリを作成する

VR Unity

Unityには標準でMovieTextureという動画を再生する機能がありますが、この機能はAndroidには対応していないので、GearVRでは利用できません。

UnityでGearVRの360動画アプリを作成する方法はいくつかあるようですが、現在はEasyMovieTextureというassetを利用して作成することが主流なようです。
https://www.assetstore.unity3d.com/jp/#!/content/10032


以下はEasyMovieTextureの使い方の簡単な説明です

1. EasyMovieTextureのimport

まずはEasyMovieTextureをimportします
f:id:portaltan:20160707175409p:plain

  • 2016/07/07現在65ドルです
  • importすると動画再生に必要なコンポーネントやデモシーン、デモ動画がプロジェクトにimportされます

2. EasyMovieTexture Editor Mode(beta)のimport

EasyMovieTextureによる動画機能は、Unityのシミュレータで確認することができません。
つまりどういうことかと言うと、確認には毎回Andoridにプロジェクトを書き出して実機で確認する必要があります。
これは凄い手間だったのですが、現在は作者様がベータ版としてUnityのEditor上でシミュレーションできるUpgrade packを用意してくださったので、こちらもダウンロードしてimportしておきます
f:id:portaltan:20160707180141p:plain

3. 360動画の用意

Equireqtagular形式の360動画を用意し、Assets/StreamingAssetsにimportします

  • 配置先はここでないといけません
  • Unity標準のMovieTextureのようにimport時に変換は行われません
  • 今回はTheta公式サイトからダウンロードしてきた滑り台の動画を使用します

f:id:portaltan:20160707182003p:plain
ギャラリー | RICOH THETA

4. 動画を投影する天球マテリアルの準備

Blenderとかでも自分で作れるようですが、私は以下のサイトで公開してくださっている天球マテリアルを利用させて頂いています
No hack, no work • UnityとOculusで360度パノラマ全天周動画を見る方法【無料編】

  • Sphere100.fbxをimport
  • importしたSphere100をHierarchyビューへD&D
  • Scaleを適当に100, 100, 100とかに拡大

f:id:portaltan:20160707180919p:plain

5. Texutureの設定

このままでは天球自体の影が出来て動画が暗くなってしまうので、Texutreの種類をStandardからUnlit/Textureへ変更します
f:id:portaltan:20160707182814p:plain

6. 動画スクリプトの貼りつけ

EasyMovieTexture/Scripts/MediaPlayerCtrlをHierarchyビューのSphere100へ貼りつけます
f:id:portaltan:20160707181155p:plain
貼りつけるとInspectorにMedia Player Ctrlという項目ができます
ここでちょっとややこしいのですが、HierarchyビューのSphere100自身をTargetMaterialという項目にD&Dします
f:id:portaltan:20160707181502p:plain

7. 再生する動画の指定

次にStr File NameにStreamingAssets以下に配置した再生したい動画ファイル名を入力します

  • 拡張子も必要です

f:id:portaltan:20160707182237p:plain

8. 確認します

ここまでで再生の準備は完了したので再生してみましょう
以下のように360動画が再生されることが確認できます
f:id:portaltan:20160707182552p:plain


今回はただ単純にアプリを起動したら1回だけ再生するという単純なアプリだったので、次回はポーズなど動画操作をする方法を載せたいと思います