[mipass]PC でも Mac でも iOS でも Android でも

「unity はマルチプラットフォームに優しい!」
その意見はかなり正しいです。です、が、本当に何も考えずマルチプラットフォーム化できるわけではありません
実際に作ってみると色々と問題が起こるものです。その問題の数々を、思い出せる限り語りつくしたいと思います。

画面サイズが固定ではない

©GMO Internet Group, Inc.
画像の再使用を禁止します

マルチプラットフォームでまず初めに意識するべきは「様々な画面サイズ」です。
Windows や Mac アプリの場合はウィンドウの可変サイズが基本ですし、スマートフォンも機種によってサイズはまちまち、縦向き・横向きなども考えると、最初から「画面サイズは無限にある」と思った方がいいでしょう。

2D 表示であれば、uGUI(RectTransform)を正しく使うことで、これらの画面サイズへ上手に対処することができます。HorizontalLayoutGroupVerticalLayoutGroup も駆使すると更に自由度が上がります。

インストーラーは作ってくれない

unity でビルドした直後のファイル(フォルダ)は、プラットフォームによって随分と違います。
それらの違いの上で、ビルド後何をする必要があるか個々に知らないといけません。
機種ごとにザックリと必要な手順を紹介します。

Windows

ビルド直後の アプリ名.exe を実行すれば、Windows アプリとして実行する状態ですが、exe 以外にも大量のファイルが存在し、そのまま配布するという雰囲気ではありません。

ビルドフォルダにデバッグ用の xxx_BackUpThisFolder_ButDontShipItWithYourGame というフォルダまで作成されます。これは絶対に消しておく必要あり。

一般的なアプリの場合、インストーラーとして配布されています。
このインストーラーの作成を unity で行うことはできないため、Inno Setup Compiler という無料ツールを使いました。

しかし、ただインストーラーを作っただけでは Windows Defender に阻まれてしまいます
これを解決するために自分でデジタル証明書を作る、という所謂オレオレ証明書をインストーラーに付加します。

信頼性とは……。

なお、ウィルス駆除ソフトの影響でどうやってもインストーラーからインストール出来ない場合もあります。
インストーラーは諦めて zip ファイルで配布するのも1つの手でしょう。

Mac

Mac の場合、Windows と異なりビルド後は1ファイル(アプリ名.app)になります。

じゃあそのままこのファイルを配布すればいいかと言うとそうではありません。Mac には正式に公証(Notarization)という証明ルートがあり、これを通過していないアプリは「危険なのでインストールできません」とはっきり拒否されます。

Notarization の方法については別記事で取り上げましたが、作業は Mac で行うこと、Apple Developer 会員であること(要年会費)など、敷居が高くなっています。

なお、M1 Mac 以降は iPhone のアプリをそのまま Mac で使えるそうなので、Mac 用に app を作る機会は減っていくのかもしれません。

Android

Android は一番簡単!
ビルドで直接 apk ファイルが作成されるので、これをそのまま配布ファイルとすることが可能ですし、Build app bundle にチェックを入れれば Google Play 用の aab ファイルを作成することも可能です。

ただ、unity では意識することのない manifest で問題が起こることもあり、その場合は Android Studio 用に書き出し、そちらで編集する必要があります。

iOS

Mac の Notarization と同様、作業は Mac で行うこと、Apple Developer 会員であること(要年会費)という前提があります。

古い Mac では最新の iOS に対応した XCode を入れられないこともありますし、Apple 開発者は定期的に結構なお布施を払う必要がありますね

ビルド直後は XCode のワークスペース環境となっているので、XCode を使って App Store に実行ファイルを転送します。

なお、手持ちの iPhone でテスト実行するだけなら、有料会員である必要はありません。

機種によって、ビルド時に色々とエラーが出る

かなり簡単なアプリでなければ「なにもなく済む」というのはレアケースなんじゃないでしょうか。

特に iOS……

無事で済んだためしがない。
ライブラリのバージョンを上げると、大抵見たことのないエラーに悩まされる。

年々セキュリティを強化している部分が引っかかって、なんかしらのエラーを引き起こすことが多いです。
たとえばこんな感じの問題を「ああ、いつものね」と自己解決する胆力が要求されます。

ファイルパスとか、DateTime とか

Windows では '\'、Mac では '/' で区切るので、ここでエラーになることがあります。
また、DateTime.ToString() を使っていると異なったフォーマットで日時が文字列になるなど、OS のローカル依存で問題を起こすケースもありました。

Windows 以外実行できないような dll を使ってしまい、マルチプラットフォームに出来なくなることもあります。System.Windows.dll とか Microsoft.VisualBasic.dll とか。

dll はインポートする前に他のプラットフォームでも使えるか、確認しましょう。

色々とあるものの

色々とあるものの、それでも9割以上 unity がよろしくやってくれるわけで、このマルチプラットフォーム環境は素晴らしいものです。
皆さんも配布の際には是非マルチプラットフォームに挑戦しましょう!そして苦労しまsh

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA