Unity6でBuild Profileを使用してビルドしてみる＆注意点

Unity6で新たに導入された`Build Profiles`は、今まで「Build Settings」や「Player Settings」で設定していた項目を別ファイルに外出しできる機能です。
この`Build Profiles`を使用してビルドする方法や、そのときの注意点などを簡単にまとめてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/99f96f25-ccf2-ab09-0538-d8e7c63b35f6.png)

この記事で動作確認した環境
Unityのバージョン：Unity 6 (6000.0.26f1)

# Build Profilesを使うと何がいいの？
ズバリ、**用途別にビルド設定を作れる**ところが良いところだと思います。

例えば下記のような種類別のビルドを作りたい時があります。
- 開発用
- イベント出展用
- リリース用

それぞれのビルドにおいて、デバッグ用のシーンが必要だったり逆に含ませたくなかったり...
シンボルによって動作を分けたかったりします。

従来のUnityだと上記の設定はプラットフォーム(AndroidやWindowsなど)ごとにしか保持できませんでした。
これが、新たに追加された機能`Build Profiles`で別々の設定として切り出すことができるようになったんです！

かくいう自分は同じプラットフォーム内でもビルド種別を分けてビルドできるように自作のスクリプトを作っていました。
同じことをしている人...企業の方も多かったのでは...

# Build Profileを使ったビルド

## Build Profileの作成
Unityのメニューから、「File」->「Build Profiles」を選択しましょう。
下記のようなwindowが表示されるので「Add Build Profile」をクリック。
![スクリーンショット 2024-11-22 18.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/fd0311a8-c6fd-e799-0b34-26b660ef045f.png)

次に対象のプラットフォームを選択します。
![スクリーンショット 2024-11-22 18.29.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/d3844f1d-3e70-773b-ea56-0d8958e66b2d.png)

これで新しい`Build Profile`が一つ追加されます。
![スクリーンショット 2024-11-22 18.30.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/7cba4567-266b-1dde-7d0f-dd606af2db3d.png)

ここで今までBuild SettingsやPlayer Settingsで設定していた項目を定義できます。

そのままだとBuild Settings相当の設定しか定義できませんが、「Customize player settings」ボタンを押すと、Player Settingsの設定値も定義できます。

:::note warn
**Player Settingsの情報を変えないで済むならその方がいいかも**
「Customize player settings」ボタンを押すとPlayer Settingsをオーバーライドできますが、よく考えたほうがいいかもしれません。

設定をオーバーライドすると、Player Settingsで全てに共通する設定を変えたくなった時に苦労します。
後述の注意点で補足します。
:::

## Build Profileを使ってビルド
`Build Profile`を使ってビルドするには、まずその`Build Profile`にSwitch Profileする必要があります。
Switch Platformみたいなものですね。
コンパイルが入ったりするのでしばらく待ちます。

![スクリーンショット 2024-11-22 18.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/1b1c5959-db2c-3180-2d39-7946d9504a3d.png)

切り替えができると、左下の`Build Profile`の欄に`Active`が表示されます。

この状態で「Build」ボタンを押せばビルドが開始されます。

# スクリプトでBuild Profileを指定してビルド
次に、スクリプトで`Build Profile`を使ってビルドする方法を見ていきます。

https://qiita.com/OnederAppli/items/580559a5835a28b65a27

こちらの素晴らしい記事でも解説されていますが、ざっくり手順をまとめるとこんな感じです。

**AssetDatabaseからBuildProfileを取得**
```c#
string buildProfilePath = "Assets/Settings/Build Profiles/AndroidDemo.asset";
BuildProfile buildProfile = AssetDatabase.LoadAssetAtPath<BuildProfile>(buildProfilePath);
```

**BuildPlayerWithProfileOptionsをBuildProfileを使って生成**
```c#
BuildPlayerWithProfileOptions buildPlayerWithProfileOptions = new()
{
  buildProfile = buildProfile,
  locationPathName = "outputpath"
};
```

**BuildPlayerWithProfileOptionsを指定してBuildPlayerを実行**
```c#
BuildPipeline.BuildPlayer(buildPlayerWithProfileOptions);
```

## スクリプトでデフォルトのBuild Profileに戻したいときは...
デフォルトのBuild Profileとは...?（呼び方不明...）
これです！↓
![スクリーンショット 2024-11-22 18.53.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62924/16680e83-e223-e492-38f5-56367a1186f9.png)

つまり、左上の「Platforms」に並んでいる...`Build Profile`に切り替えていない状態でデフォルトに選択されているやつです。

これに切り替えるスクリプトはこちらです。
```c#
BuildProfile.SetActiveBuildProfile(null);
```

ビルドスクリプトで、普段はデフォルトの`Build Profile`、ビルドは定義したそれぞれの`Build Profile`...のように運用したいときに使えるかもです。

# Build Profileの注意点
最後に自分が考える`Build Profile`の注意点を簡単にまとめます。

**Player Settingsの項目をいじったら全部変える必要があるかも**
項目によるかもですが、Player Settingsを定義している場合に共通で使う設定を変えたくなったら、全ての`Build Profile`ファイルの設定を変える必要があります。
例えば、`Target API Level`を変えるなど...

だるいですね...。
忘れずに変えましょう。

**異なるプラットフォームのBuild Profileに切り替えたらswitch Platformが入る**
当然と言えば当然ですが、長い待ち時間になるかもなので運用の方法を考えた方がいいかもです。
自分はプロジェクトをGitで管理しており、それぞれのプラットフォームごとにリポジトリをclone、そちらでビルドをすることでswitch platformを防いでおります。
もっと良い運用方法があれば...募集中です！

# まとめ
自作ゲームをUnity6へアップデートしたら真っ先に対応しようとしていたのがこの`Build Profile`でした。
この機能嬉しいんですが、もっと早く欲しかったですね。欲しがりさんですね。

`Build Profile`は便利ですが、全てに共通する設定を書き換えたい場合に全ファイル更新がする必要がる...など注意点もありました。
この点を考えると、従来の自作ビルドスクリプトで種類別ビルドを作るのもまだ有効な手かもしれないなと思いました。

自分はとりあえずUnity6の標準機能に乗っかって運用してみたいと思います〜