ビルドスクリプトを書く

概要

テスト時のビルドとリリース時のビルドで設定が違い、ビルド時に毎回指定するのも面倒なのでスクリプトを書きます。
基本的に以下のページに沿って実装しています。
BuildPipeline.BuildPlayer

コード

Editorスクリプトなので、Editorフォルダ配下に置きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class BuildScript {

[MenuItem("MyBuild/Test Build")]
public static void TestBuild() {
Build(false);
Debug.Log("テストビルド Done");
}

[MenuItem("MyBuild//Release Build")]
public static void ReleaseBuild() {
Build(true);
Debug.Log("リリースビルド Done");
}

static void Build(bool isReleaseBuild) {
var scenes = GetScenes(isReleaseBuild);

BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.scenes = scenes;
if (isReleaseBuild) buildPlayerOptions.locationPathName = "Build/Release/game.exe";
else {
buildPlayerOptions.locationPathName = "Build/Test/game.exe";
//テスト時はDevelopmentビルドのオプションを有効にする
buildPlayerOptions.options = BuildOptions.Development;
}

//win64 Standalone向けを指定
buildPlayerOptions.target = BuildTarget.StandaloneWindows64;

BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions);
BuildSummary summary = report.summary;

if (summary.result == BuildResult.Succeeded) {
Debug.Log("Build succeeded: " + summary.totalSize + " bytes");
} else if (summary.result == BuildResult.Failed) {
Debug.LogError("Build failed");
}

}

//DebugXXXXというシーンがいくつかあり、テストビルド時のみ有効にしたい
//リリースビルド時はそれらのシーンを除外している
static string[] GetScenes(bool isReleaseBuild) {
List<string> sceneList = new List<string>();
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
foreach (EditorBuildSettingsScene scene in scenes) {
if (isReleaseBuild && scene.path.IndexOf("Debug") != -1) continue;
sceneList.Add(scene.path);
Debug.Log(scene.path);
}
return sceneList.ToArray();
}

}

ビルドプション

以下のようにDevelopmentのオプションを指定していますが、これはenum値のflagです。
buildPlayerOptions.options = BuildOptions.Development

以下にenum値が定義されているので、複数指定するときはORでflag指定すれば良いです。
BuildOptions

buildPlayerOptions.options = BuildOptions.Development | BuildOptions.AllowDebugging;

ビルドサマリー

ビルド後にBuildSummaryが出力されますが、ここではEditor Logで見られるような各アセットの容量などは確認できません。

それらを確認するのにPackage ManagerからインストールできるBuild Report Inspectorが便利そうです(2020年3月時点でまだプレビュー)。
Library/LastBuild.buildreportに最後にビルドしたレポートが保存されるらしく、それを解析しているようです。

確認バージョン

Unity 2018.4.17f1

Unityカテゴリの記事
Kris' Favorite Assets が便利
キー操作でUIのナビゲーションをループさせる
TextMeshProのSprite Assetを更新する
UnityPhysicsDebugDraw2D が便利
色管理を考える
Open Recent Scene が便利
細かいTips
AnimatorのCulling Modeでハマった話
Vectrosityを使ってUGUI上で線や円のアニメーションをする
スプレッドシートからjsonデータを読み込む
ビジュアルノベルアセットFungusにコマンドを追加してカスタマイズする
Skinned Mesh Renderer の Boundsについて
シーンごとにビルド結果の容量を出す
シーンビューにクオリティ設定のスライダーを出すエディタ拡張
ビルド結果のFile headersが大きい理由
フリーのビジュアルノベルアセットFungusを使ってRPGのイベントを作る
Move To View を改良する
フリーのビジュアルノベルアセットのFungusが便利
Visual Studio で保存時にフォーマットする
スプレッドシートからデータを読み込む
Easy Save2 で シリアライズされたクラスを保存する
ShaderでSpriteの色相をシフトする
Sprite、Texture の 色相をシフトする
uGUIのButtonをクリック時にハイライトのままになる
uGUIのCanvas Groupを使って透過処理をしたり、操作を制限する
自作のコンフィグ画面に必要なもの
uGUIでトグルなボタンを作る
uGUI で動的にボタンを作る
Easy Save2 を使ってみる
csv読み込んで ローカライズ
LoadLevelAdditive で共通シーンを加算
画面全体に色をかける
Any State でどこからでも遷移できるようにする
iTween のStop ではまる
sprite の multiple で 境界がおかしくなる
2D画面に線を引く Line Renderer
Renderer の Materials を スクリプトから設定する
背景をスクロールさせる