UnityのBatchBuildについて

BatchBuildってなんですか

 コマンドラインからUnityEditorを起動し、プロジェクトをビルドすることです。

バックグラウンドでビルドを走らせることができ、エディタを立ち上げる必要がないです。

 

何に使うの?

主に自動ビルドを行いたい場合などに用いられます。

継続的インテグレーションといえばわかる人がいるかもしれません。

詳しくは調べてみてください、Jenkinsなどが代表的なビルドサーバーですかね。

今回の例ではiOSAndroidのビルドについてを挙げます(XCodeとandroidsdkは設定済みの体で進めます)

 

準備

まずはプロジェクトのAssets/Editorフォルダ内にBatchBuildフォルダを作成し、その中にBatchBuild.csをCreate->C#スクリプトから作成しましょう。

スクリプトの中身はこんな感じです。

giste16b45825009cff98e7e

 

順を追って説明をします。

 

BuildProject_~

これがコマンドラインから直接呼ばれるメソッドで、ビルドに関する設定を行います。

ビルドするシーンのパス、ビルドの成果物の保存先のパス、ビルド先の対象、ビルドのオプション(これは色々ある)の4つを設定しています。

iOSでは他にも色々設定してありますが、この辺は設定ミスをなくすためにPlayerSettingsの中身をいじってたりするだけですので割愛します。

GetEnabledScenePaths()

見てのとおりです、他にBatchBuildを紹介しているブログさんは多々あったのですがシーンの指定が手入力だったり全取得だったりで使い勝手に欠けたので設定をしました。

BuildSettingsの中に追加されていて、かつチェックの入っているシーンのみパスを返します。

ApplicationBuild()

実質ビルドをするのはこのメソッドです。

BuildPipeline.BuildPlayerに先ほど設定したフィールドを引数として与え、ビルドを行っています。

 

こんなところがあれば準備完了です、他にもコマンドライン上から引数を持ってきて判別することもできます。調べてみてください。

ビルドしてみよう

では実際にビルドしてみましょう。

その前に

Unityを起動したままコマンドラインで叩くとエラーを吐き出す場合があります

(実際自分はエラー吐きました)

Unityは終了させましょう。

 

気を取り直して、Androidビルドしてみます。

ターミナルを起動して以下のコマンドを叩いてみてください

 

$<Unity.appのパス> -batchmode -projectPath <プロジェクトのパス> -executeMethod BatchBuild.BuildProject_Android -quit

-batchmode 

バックグラウンドでエディタ起動します

-executeMethod

指定したメソッドを叩きます

 

うまくできていれば指定したパスに成果物のapkが出力されているはずです

 

AndroidiOSの違い

AndroidSDK連携を行っているので直でapkが吐き出されますが、iOSXCodeのプロジェクトが吐き出されます。

iOSは設定によってシミュレータービルド、デバイス向けビルドがあるのでそこも忘れないようにしましょう。(あんまり困ったことはないけど一応)

 

以上、何か間違いがあればコメント、もしくは@YutaKasedaまでお願いします。 

 

2016/8/15追記

Windowsだとシンボリックリンクが使えないのでsymlinkLibのbuildOptionを使うとエラーを吐き出すらしい

対処法を書かれてる方がいらっしゃるので追記

qiita.com

 

参考ブログ様

Unity - コマンドラインからビルドする - Qiita