Unityのプロジェクトをスクリプトからビルドするには、Unityのエディタで動かすスクリプトからBuildPipeline.BuildPlayer()を呼び出してやればよい。でそれをコマンドラインから呼び出せばok。
簡単な例
エディタ用のスクリプトファイルを追加して(ex. Assets/Editor/BuildBatch.cs
)、例えばAndroid用にビルドするには、
// Assets/Editor/BuildBatch.cs |
などというメソッドを用意してやって、これを外部から呼び出してやる。
コマンドラインからUnityスクリプトのメソッドを呼び出す
Unityのバッチモードというのを使って、コマンドラインから呼び出す:
# build.sh |
- MacOSXの場合、Unityの実行ファイルのパスは
/Applications/Unity/Unity.app/Contents/MacOS/Unity
-batchmode
でバッチモード指定-executeMethod
で実行するメソッドを指定(クラス.メソッド
の形)-quit
でメソッドが終わったらエディタを終了させる
出力するシーンの列挙
BuildPipeline.BuildPlayer()
の第一引数には出力するシーンのパスの配列を与えるが、いちいちシーンを追加するのはかったるいので、ビルドセッティングから取得する:
using System.Linq; |
Android
キーストアの指定をする
Android用にビルドして作成するapkに署名するにはキーストアのパスワードが必要になる。なぜかUnityの設定が保存されないので、バッチビルド時に指定してやる:
// Assets/Editor/BuildBatch.cs |
- キーストアのファイルは予め指定されているものとする
- PlayerSettingsのAndroid用のドキュメント
iOS
ターゲットがiOSの場合、.ipaなどが直接出力されるわけじゃなくて、Xcodeのプロジェクトが出力される。
プロジェクトの設定などを修正する必要がある場合、C#からXcodeのプロジェクトを扱えるXCodeEditor-for-Unityなどを使うとよい。
Xcodeのプロジェクトをコマンドラインからビルドするには、shenzhenを使うと楽であった。
番外編:メニューから呼び出す
コマンドラインからビルドするにはUnityをいったん閉じないといけないが、ビルドのスクリプトを作成/修正している段階だと閉じたり開いたりするのが大変である。そこでメニューから実行できるようにして動作の確認をすると楽である:
// Assets/Editor/BuildBatch.cs |
ビルドするメソッドから成功/失敗を返すようにして、コマンドラインから呼びだされた場合にだけEditorApplication.Exit()
で終了させてやる。