ビルドスクリプトを書く

概要

テスト時のビルドとリリース時のビルドで設定が違い、ビルド時に毎回指定するのも面倒なのでスクリプトを書きます。
基本的に以下のページに沿って実装しています。
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
55
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カテゴリの記事
Color SpaceがLinearのときUIの透明度が正しくならない
History Inspectorの紹介
History Inspectorの紹介
敵AIとビジュアルスクリプティング
Chronosを使った感想
コンポーネントの順番をスクリプトから並び替える
Smart Inspectorの紹介
Kris' Favorite Assets が便利
キー操作でUIのナビゲーションをループさせる
TextMeshProのSprite Assetを更新する
UnityPhysicsDebugDraw2D が便利
色管理を考える
細かい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 を スクリプトから設定する
背景をスクロールさせる