モノクロタイム

I'm from the future!

【Unity4】Unity4とXcode4.5の相性が最悪な件【Xcode4.5】

アルバイトでUnity4を使いせこせこアプリ開発をしているれいじですこんにちは。

 

先日iOS6が発表されて、それに伴いXcodeのアップデートも始まりましたね。

いずれiPhone5に対応しなければなりませんし、iOS6での動作確認もしなければなりませんでしたのでXcodeのアップデートもやりました。

 

するとUnityとXcode間に問題がボロボロ出てきてしまいリリース直前で火を吹きました。今思うとアップデートしなければこんなことには…。。。

 

やってしまったものはしょうがありませんし

なんとかFixする方法を考えました。

 

Unity4・Xcode4.5の環境を用いてアプリを開発した際に起こる現象

 

・スプラッシュスクリーンが2重に表示される

 

f:id:yomoyamareiji:20120928101626p:plain

横画面に対応したスプラッシュスクリーンを表示しているのですが、

画像が縦になり本来出るべき画面の上に張り付いている状態

 

・カメラの位置がおかしい

 

f:id:yomoyamareiji:20120928101656p:plain

 

私が確認したのは以上の2点です。

Unity側で画面回転を制限(Player Settingのなかで制御できます)していると起こる現象のようです。

因みに私はLandscapeRightに設定していました。

 

1点目については割と単純な方法で解決しました。

この現象が起こると、Unity側でスプラッシュスクリーンの画像を外そうが外すまいが、ビルドしても治りません。

1.一旦Unityを終了し、問題のあるプロジェクト(Aとする)とは別のプロジェクト(Bとする)を開きます。

2.Bを閉じ、Aを再び開く。

3.AのBuildSettingsからPlayer Settingsを選び、画面回転設定部分をAll Rotateに設定

 下のチェックはどれも外してはならない

4.ビルド

で、1つめの問題は解決しました。

スプラッシュスクリーンを設定しなくても以前のスプラッシュスクリーンが残っていることから、スプラッシュスクリーンの2重書き出しを行なっているものと推測できます。

ただ何故方向を変えて張り付いているのかはわかりません。iOS6 SDKで画面回転制御に大幅な変更があったからかな…

 

2つめ

コレについてはかなり苦労した。

さらにこれに関しては個人によって解決方法が分かれてしまうかもしれません。

このアプリは横画面にして使って頂く事を前提に作っていましたので、Unity側で画面をLandscapeRight(ホームボタンが右)に制限をしておりました。

ので、コード内で画面を固定しました。

というのも、1点目が解決すると今度はカメラのアスペクト比が全く変わってしまい、両端に黒帯が出るなどの不具合が出たのです。

黒帯が出るよりはマシかな、ということで。

Awakeを使ってアプリ起動時に画面を固定します。

C#

void Awake () {

  Screen.orientation = ScreenOrientation.LandscapeLeft;

}

JavaScriptならfunction Startでいくと思います。

これだけ。

カメラのアスペクト比は横固定、縦画面では切り替わりませんので、ここをどうやって改善していくかが今後の課題になりそうです。

また、このLandscapeLeftは、ホームボタンの位置ではなく端末本体をどちらに傾けたか、のLeft or Rightのようです。紛らわしい。

LandscapeRightにするとカメラが常に上下反対を映すようになります。

 

関連した話になりますが、

PrayerSettingsで画面固定をするとき、Unity側でLandScapeRightにするとXcode側ではLandScapeLeft、Unity側でLandscapeLeftにするとXcode側でLandscapeRightになるんですよね〜。

Apple、どんなところに手入れてんねん…w