2015年9月12日土曜日

[Unity3D] 画面表示を左右反転させる方法

How to reverse right and left

[動画編集] VegasProでハコビジョン用動画を作る (左右反転)
ではハコビジョン向けに動画を左右反転する編集方法を説明しました。
ゲームエンジンUnity3Dの映像も左右反転してハコビジョンに映してみたのでその方法をまとめました。


環境

・Windows8.1
・Unity3D 5.1.0f3

検証するに当たり、著作権が緩めのUnityアセットであるクエリちゃんユニティちゃんを使います。
クエリちゃんはUnityアセットストアから、ユニティちゃんは公式サイトからダウンロードできます。


Unity3Dはスマートフォンをサブモニター化できなかった

KOMADOを使ってスマートフォンをVegasProのサブモニター化
と同じようにUnity3DのGameウィンドウをスマートフォンに映したかったのですが、Unity3DはKOMADOと同時に起動すると必ずクラッシュします。
自分の環境だけかもしれませんがUnity3Dを実行しながらサブモニターに映すことが出来ませんでした。


スクリプトを使わずに表示を左右反転する

とりあえず真っ先に思いついたのは
[Unity3D] サイドバイサイドで立体視できるゲームを作るには
で使ったRenderTextureを使う方法です。
メインカメラにRenderTextureの裏側を映せば左右反転されたように見えます。
スクリプトを書く必要が無いので簡単にできました。


スクリプトで左右反転する

スクリプトでも左右反転できます。
いくつかのサイトを参考にしたのですが
http://answers.unity3d.com/questions/20337/flipmirror-camera.html
とか
http://wiki.unity3d.com/index.php?title=InvertCamera
のコードをUnity3D 5.1で正常に動作させるには改良が必要でした。
※詳しくは下の「失敗談」にて

改良した結果、C#で書くとこんな風になりました。
ReverseRightAndLeft.cs


このスクリプトをscene内のカメラにアタッチしておくと、ゲーム実行中に画面が左右反転します。


ユニティちゃんライブを左右反転させる

ユニティちゃんが歌って踊る「ユニティちゃんライブステージ! -Candy Rock Star-」(以下ユニティちゃんライブ)はUnity3D用プロジェクトです。
ユニティちゃん公式サイトからダウンロードできます。
http://unity-chan.com/contents/guideline/

Main.unityというSceneファイルを開いて実行するとライブが始まります。
ところがこのSceneは複雑なので気軽にRenderTextureを追加して左右反転できそうにありません。
さらにhierarchyに静的なカメラがないので上のスクリプトをアタッチできません。

ユニティちゃんライブは上のスクリプトの他、さらに下のようなC#スクリプトが必要です。
ReadyScript.cs


Main.unityというSceneを開いた状態でメニューの
GameObject - Create Empty
を実行するとHierarchyにGameObjectが追加されるので、名前をReadyScriptObjectに設定します。

このReadyScriptObjectのInspectorに上のReadyScriptをアタッチします。

実行するとhierarchyに動的にMain cameraというPrefabのカメラがロードされるので

このカメラのInspectorに上のスクリプトがアタッチされていればOKです。

これでユニティちゃんのステージを左右反転させることができました。
ただし、最初の白地のUnityロゴの画像はメインカメラを経由してないようで反転できませんでした。
Unityロゴも左右反転させたい場合は、画像ファイル White Logo.png をあらかじめ画像編集ソフトで左右反転させておいたほうが楽だと思います。


exeファイルにビルドすればKOMADOでスマートフォンに映せる

exeファイルにビルドして実行したらKOMADOでスマートフォンに映すことが出来ました。

KOMADOを起動してビルドしたexeファイルを起動してSelect monitorでサブモニターを選択すれば

スマートフォンをサブモニター化してハコビジョンに映すことが出来ました。ただしフレームレートは低下します。
何が映ってるか分かりにくいですがユニティちゃんライブです。

ユニティちゃんライブはRenderTextureを使っているのでProfessional版UnityでビルドしないとAndroidやiOSで実行できないようです。


失敗談

参考にしたサイトのスクリプトを修正しないまま使ったらと、とんでもない映像になりました。
左がScene、右が上のスクリプトを実行したGameウィンドウです。
一部のパーツが表示されず、まるでホラー映像のようです。

クエリちゃんも同じように一部が表示されません。

Matrix4x4.Scale(new Vector3(-1, 1, 1));
が影響しているようです。
マテリアルが透過色ありのテクスチャを表示するメッシュが丸ごと消えたようです。(2015年12月17日追記)


関連ブログ

[動画編集] VegasProでハコビジョン用動画を作る (左右反転)
[Unity3D] 二つのscene(シーン)を一つにまとめる方法
[Unity3D] サイドバイサイドで立体視できるゲームを作るには [クエリちゃん][ユニティちゃん]
[Unity3D] 透視投影と平行投影を合成するには[ユニティちゃん]
[Unity3D] Unity5のアプリをAndroid Studioにインポートする方法
[Unity3D] Unity4からUnity5へのバージョンアップでの変化
[Unity3D] ゲーム画面をキャプチャしてMovie Studioで動画に編集する
[Unity3D] Visual Studio Community 2013を日本語化してUnityアプリを作る

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。