Unity で作った Android アプリを iOS に移植した際にはまったところをまとめてみた
こんにちは、Matsukesoft です。
この度、もともと Android 向けに作っていたシフトシューターを iOS 向けに移植しました。
Unity 及びビルド周りで対応が必要だった部分、はまった部分がいくつかあったので、ここで紹介しておこうと思います。
お品書きはこんな感じ
- 環境
- Mac に環境を移す
- テクスチャの解像度がさがる
- フレームレートが下がる(超もっさり)
- 例外処理でアプリが落ちる
- (番外編)ビルドが激遅鈍足丸
では張り切ってどうぞ
■環境
まずは、それぞれの制作環境です。
Android ビルド環境: SuerfacePro2、 Windows 8 、Unity 5.1.3f1
iOS ビルド環境 :Mac mini (6年位前のもの)、 OSX Xcode は移植時点(2015/08 頃)で最新のもの 、Unity 5.1.3f1
■Mac に環境を移す
もともとメインは Windows で開発しているので、Mac にプロジェクトを持っていく必要があります。
最初は、windows 上でいったん Xcode 用プロジェクトにビルドしてそれを LAN で Mac に転送しようと思っていたのですが、
頭おかしいくらい速度が出なかったので(原因不明)この方法はあきらめました。
win からmac にLANでファイル転送してるんだけど 30KB/s しかでねぇどうなってんだこれ
— マツケソフト@アプリ公開中 (@matsukesoft) September 6, 2015
次の方法として、シフトシューターは SVN で管理していたので、mac 側でもチェックアウトしてビルドするようにしました。
(このために、Win 版と同じバージョンの Unity を DL しなおしています)
チェックアウトしたらプロジェクトは無事に Mac 側の Unity で開くことができました、、、が、
いくつか問題が発生しました。
■テクスチャの解像度が荒くなる
とりあえずプロジェクトを動かしてみると妙にテクスチャの解像度が低くなっていました。
特に、Live2D で動かしていたシフ子はひどい顔に。
ひぃぃークオリティ設定特に気にせずiOS向けにビルドしたら、テクスチャの解像度が足りなくてシフ子が軽くホラーに!? pic.twitter.com/5lg2mqYxVH
— マツケソフト@アプリ公開中 (@matsukesoft) September 6, 2015
原因は Unity の Quality Settings でした。
Unity は プラットフォームごとに Quality のセッティングができます。で、そこにはテクスチャの解像度やシャドウの ON/OFF など様々な設定があります。
これが Android とiOS で設定が異なっていたためテクスチャの解像度が異なっていました。
基本、Quality Settings の設定をそろえるだけで大丈夫ですが、テクスチャに関しては、さらに個々のテクスチャで解像度の設定をオーバーライドできるので注意が必要です。
■フレームレートが下がる(超もっさり)
Mac の Editor 上で動作させていたときは特に違和感なかったのですが、iPod touch で動かしたところ FPS が下がってもっさりしてしまいました。
フレームレートの設定は Unity 上で EveryVblank (毎フレーム更新)にしており、Android ではこれだけで 60 FPS になりました。
が、iOS ではこれだけではたりず、デフォルトでは Vblank 自体が 30 FPS しかでないみたいです。
iOS で 60 FPS 出すにはスクリプトから明示的に次の記述が必要です。
Application.targetFrameRate = 60;
シフトシューターはすべての動作がフレームレート依存だったので、すぐにわかりましたが、deltaTime をつかった可変フレームレートに対応したゲームを作っていると気づきにくいかもしれないので、一度確認しておくといいかもしれません。
■ 例外処理でアプリが落ちる
これも iOS 版でのみ起こった現象ですが、null になっている GameObject の transform にアクセスしようとして、アクセス例外が出たときに、Editor Android では(エラーは吐くものの)動き続けるのですが、iOS ではアプリごと落ちてしまうようです。
「シフトシューターで特定の敵に負けるとアプリが落ちる件」を修正しました。
原因は、自機のGameObject が削除されてるのに敵が自機を狙ってビーム撃とうとして参照エラーでした。Storeの更新は審査待ちです。当面の回避策は「敵に負けない」です。宜しくお願いします。
— マツケソフト@アプリ公開中 (@matsukesoft) September 20, 2015
@matsukesoft ちなみに Android や Windows 、WebPlayer は同じ実装でアプリが落ちるということはないです。多分例外処理のレベルがプラットフォームによって違うのだろうと予想してますが皆も iOS に移植で出すときは気を付けてね!
— マツケソフト@アプリ公開中 (@matsukesoft) September 20, 2015
まぁ、エラーに気づいてちゃんと直しておけばよかっただけの話なのですが。リリース後に twitter からの報告で気づいたので更新版を出しなおすことになりました。
テストプレイ中にエディターでエラーが出ていればちゃんと直しましょうという単純な話でもあります・・・
■ (番外編)ビルドが激おそ
古い mac mini だったため unity -> xcode -> binaly までに合計で 20 分程度かかっていました。
mac mini のビルド長すぎて禿そう
— マツケソフト@アプリ公開中 (@matsukesoft) September 7, 2015
mac 買い替えようかと何度思ったことか。おかげでスパロボはとても進みました。
次は、iOS を公開してみての反共的な部分を共有したいと思います。