概要
Unityはマルチプラットフォーム対応のゲームエンジンなのでiOSやAndroid以外にWindows向けのバイナリを生成することも出来ます。
なので「ちょっとしたゲームが出来たから配布してみんなに遊んでもらおう」と思った時はzipで固めてどこかにアップします。
でも世の中にはzipの解凍でつまづく人も結構いますよね。あるいは日本語が含まれるパスだと動かないライブラリが含まれているとトラブルが起きますよね。Program Files以下にインストールされるインストーラーを作ってサポートで楽をしましょう。
Inno Setupを使います。
6.2.0が執筆時点最新です。(2021/7/5くらいにバージョンが上がって更にモダンになりました。めでたいですね。
今回特にUnity製のWindows用アプリやゲームを対象にしますが、その場合はこの 記事を読んでから30分以内にインストーラが完成していると思います。
余談:Inno SetupはVSCodeのインストーラとしても使われています。実績がすごい!
InnoSetupのインストールから実行
インストール
特に暗号化モジュールを使う事がなければそのままインストール
https://jrsoftware.org/isdl.php 内の
innosetup-6.2.0.exe を使います。
実行とウィザード立ち上げ
実行してScriptWizardを使います。以前はこのWizardが不親切でしたが、6.2は凄く親切です!
(左上のFile→NewからいつでもこのScriptWizardは使えます。)
ウィザード内の処理
アプリ名やバージョン、開発者の名前やウェブサイトを入れます。
インストール場所を指定します。Program Filesがおすすめです。(他のフォルダを選べるようにするかはお好みで)
メインのexeを指定して、プログラムの他のファイルを指定します。
Unityの場合、あなたがビルドしたexeを上に指定した後「other application files」に**「Add folder」でUnityでビルド指定したフォルダをそのまま指定** しましょう(IL2CPPビルドの場合はデバッグシンボルフォルダを消しておきましょう)
他は正直設定しなくても良い感じにやってくれるので(言語選択だけJapaneseを追加しておく、くらいです)次へ、をドンドン押していきましょう。
最後にここでコンパイラディレクティブを指定(デフォルトでonです)してNext
ウィザードが終了します。
アプリのインストーラ化
↑の手順でウィザードが終了した後は、この難しそうな画面が出ます。
この難しそうな画面に書かれている設定ファイルが *.iss ファイル
で、今までのウィザードはこのissファイルを生成しているだけです。なので issファイルを一回生成したら同じプロジェクトではずっと使いまわしが出来ます。
プロジェクトのソースを管理しているGithubなどに、生成したissファイルをコミットしておきましょう。
ここで「セットアップ中のアイコンを指定したい」とか「バージョンアップ時に上書き抑制したい設定ファイルの指定」とかを手書きで追加できます。
この画面で赤丸のついた再生ボタンを押すとインストーラが作られます。内部処理で圧縮を掛けているので10分程度時間が掛かります(プロジェクトが大きいともっと掛かるかも)
出来上がったインストーラexeファイルは(アイコンを設定しなければ)こういう感じでissファイルのOutputDir に書いてあるフォルダに出力されます。
動作確認
出来上がったexeファイルを実行して
- インストール後にアプリが起動することを確認
- Windowsのプログラムと機能のインストール済みプログラムに登録されている事を確認
- Windowsのプログラムと機能からアンインストール出来ることを確認
してください。
FAQ
バージョンアップの時ってどうなるの?
設定ファイル(*.iss)の AppId(uuid4で自動生成されます)が同一なら同じアプリだとみなして、同じフォルダに上書きインストールしてくれます。
そのときにフォルダ構造が変わっていたり、消えていたりしたときも、結構よしなにやってくれるようです。
Unity製のアプリケーションは幸いなことにほとんどフォルダ構成が変わらないので有利です。
バージョンアップ時に設定ファイルの保存はどうするの?
- PlayerPrefsに保存しているデータはそのまま残ります。
- 例えばjsonの設定ファイルをアップデータで上書きしない、という指定は "Flags: ignoreversion" を指定してください。こちらが詳しいです。
https://qiita.com/pekochun/items/5e6d4f827169780d1f48
アプリ実行時の証明書警告は出るの?
残念ながらInnoSetupで生成したインストーラ自体はWindowsで警告されなくても、その後のあなたのゲームを初回起動したときはWindows警告が出ます。
これは別途証明書を取得するか、サポートに書いておきましょう。