
前回は、プロジェクトを GitHub に置いて、ボタンを押すと GitHub Actions が動くようにしました。今回は、いよいよ Unity Build Automation(UBA) を設定して、Unity のクラウドで星ふる夜の庭をビルドします。ビルドに何分かかって、そのうち何分ぶんの料金がかかるのかも、実際に2回ビルドして測ってみたいと思います!
UBAってなに?
UBA は、Unity が用意したクラウドのマシンで、プロジェクトをビルドしてくれるサービスです。
- GitHub などからプロジェクトを取ってきて、クラウドの Unity でビルドしてくれる
- 自分のパソコンでは、エディタを開かなくてもいい(ビルドしている間も、ほかの作業が出来る)
- iOS のビルドに必要な Mac も、UBA のものを使える(このシリーズの iOS の回で使います)
- 毎月の無料の分(Windows のマシンなら200分)があり、超えた分は1分ごとの料金(くわしくは次回のお金の回で)
プロジェクトをつなごう
UBA でビルドするには、次の3つをつなぎます。
- Unity のプロジェクト ↔ Unity Cloud のプロジェクト
- Unity Cloud のプロジェクト ↔ Build Automation
- Build Automation ↔ GitHub のリポジトリ
Unity Cloudのプロジェクトにつなぐ

- Unity で星ふる夜の庭のプロジェクトを開く
- Edit>Project Settings>Services を開く
- 組織を選んで、クラウドのプロジェクトを作ってつなぐ(名前は Product Name の「星ふる夜の庭」になりました)
- File>Save Project で保存して、変わった ProjectSettings をコミットして push する
Build Automationを始める

- ブラウザで Unity Dashboard を開く
- 上のプロジェクトの選択で「星ふる夜の庭」を選び、左のメニューから Build Automation を開く
- 支払い方法の登録を求められたら登録する(無料の分を超えたときに、ビルドが止まらないように)
GitHubをつなぐ
UBA が private のリポジトリを読めるように、GitHub でトークン(読むための鍵)を作って、UBA に渡します。

- GitHub の右上のアイコン>Settings>Developer settings>Personal access tokens>Fine-grained tokens>Generate new token
- Token name:unity-build-automation
- Expiration:90日(期限が来たら作り直す)
- Repository access:Only select repositories で、unity-release だけを選ぶ
- Permissions:Contents を Read-only(Metadata は自動で Read-only になる)
- Generate token を押して、出てきたトークンをコピーする(一度しか表示されない)

- Build Automation の 設定>Source control を開く
- Source control provider:GitHub を選び、Personal Access Token にトークンを貼って Authorize
- Repository で unity-release を選んで Save
トークンの権限は「読むだけ」で、リポジトリも1つだけにしました。鍵を渡すときは、必要なことだけが出来る鍵にしておくと、もし漏れても困ることが少なくて済みます。
Windowsのビルドターゲットを作ろう
ビルドターゲットは、「どのプラットフォーム向けに、どのマシンで、どうビルドするか」をまとめた設定です。
- Build Automation の ビルド構成 を開き、右上の Target setup を押す
- プラットフォームは Windows desktop 64-bit を選ぶ(32-bit もあるので間違えないように)

- Target name:windows
- Branch:main
- Unity version:Manually select Unity version で 6000.3.22f1(手元と同じバージョンにする)
- Builder Operating System and Version:Windows 11 24H2

- Machine specifications:Windows Micro(「Free tier eligible」と書かれた、無料の分が使えるマシン)
- Scheduling の Auto-build はオフ(GitHub に push するたびにビルドしないように。ビルドを始めるのは、あとの回で GitHub Actions にやってもらう)

- Advanced settings>Script hooks>Pre-Export method:BuildScript.PreExport(次の節で作るメソッド)
最後に Save します。

BuildScriptにPreExportを足す
UBA は、ビルド(BuildPipeline.BuildPlayer)を自分で行います。なので、#3(AIを使ったのに俺のゲームがリリースできないわけがない#3|ビルドを1か所から:BuildScriptを作ろう)で作った BuildScript.Build は呼ばれません。その代わり、ビルドの直前に呼んでもらうメソッド(Pre-Export method)で、ゲームの名前とバージョンを入れます。
BuildScript に、次の2つのメソッドを足します。
// UBA の Pre-Export method から呼ぶ入口。ビルドは UBA がするので、設定を入れるだけ
public static void PreExport()
{
ReleaseConfig config = LoadConfig();
string version = GetEnvironment("APP_VERSION", PlayerSettings.bundleVersion);
int buildNumber = int.Parse(GetEnvironment("BUILD_NUMBER", "1"));
PlayerSettings.productName = config.productName;
ApplyVersion(version, buildNumber);
Debug.Log($"[BuildScript] PreExport {PlayerSettings.productName} {PlayerSettings.bundleVersion} ({buildNumber})");
}
// 環境変数から値を取る。無ければ defaultValue
static string GetEnvironment(string name, string defaultValue)
{
string value = Environment.GetEnvironmentVariable(name);
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
return value;
}
PreExport- release.json のゲームの名前と、バージョン・ビルド番号を入れる(中身は Build と同じで、ビルドはしない)
- 値はコマンドラインの引数ではなく、環境変数から受け取る(UBA は Unity を自分で起動するので、引数を足せないため)
BUILD_NUMBER- ビルド番号。今回の2回のビルドでは、UBA のビルドの番号(1回目なら1、2回目なら2)が入っていた
- ただ、GitHub Actions から動かした回では入らなかった。ビルド番号を UBA から確実に受け取る方法は、ビルド番号が必要になる iOS の回(#13)で直します
APP_VERSION- 今はどこからも渡していないので、Player の Version(1.0)のまま
コミットして、GitHub に push しておきます(UBA は GitHub のものをビルドするので、push しないと届きません)。
ビルドしてみよう

ビルド構成の windows の行の Build を押すと、ビルドが始まります。ビルド履歴で、進み具合と結果が見られます。

ビルドの詳細の Full Log で PreExport を探すと、[BuildScript] PreExport 星ふる夜の庭 1.0 (1) という行が出ていました。
- 名前(星ふる夜の庭)とバージョン(1.0)、ビルド番号の1が入った
- すぐ下に
UnityEditor.CloudBuild.Builder:TryRunUserExportMethodとあり、UBA が PreExport を呼んでくれたことが分かる
2回目のビルドでは、ここが (2) になっていました。
できたものをダウンロードする

ビルドの詳細の Download から、できたものを zip でダウンロード出来ます。
- 中身は、#3 で手元でビルドしたときと同じ(.exe・_Data のフォルダ・UnityPlayer.dll など)
- 大きさは約45MB(zip)
1回目は、.exe の名前が Default Windows desktop 64-bit.exe になっていました。ビルドターゲットを作ったときの標準の名前が、そのまま実行ファイルの名前に使われていたためです。ビルド構成で windows を Edit し、Build output の Executable name を StarGarden に変えておきましょう。変えてからビルドし直すと、zip の名前が StarGarden.zip になり、中身も StarGarden.exe と StarGarden_Data になりました。
ダウンロードしたあとで .exe の名前だけを変えるのはやめましょう。Windows のゲームは、.exe と同じ名前の _Data のフォルダを探して起動するので、名前がずれると起動できなくなります。

何分かかった?
同じ設定のまま、2回ビルドしました。2回目は、1回目のときの Library(Unity が作るデータ)を UBA が取っておいてくれるので、インポートが速くなります。
| 1回目(キャッシュなし) | 2回目(キャッシュあり) | |
|---|---|---|
| 押してから終わるまで | 18分10秒 | 17分06秒 |
| 順番待ち・マシンの準備 | 9分26秒 | 10分28秒 |
| Unity のインポートとビルド | 4分25秒 | 1分31秒 |
| 料金がかかる時間 | 8分44秒 | 6分38秒 |
料金がかかるのは、プロジェクトを取ってきてから終わるまでです。ビルドの詳細の Billable build time に出ています(ダウンロードの画面の 00:08:44)。順番待ちとマシンの準備の約10分は、待たされても料金はかかりません。
- 2回目は、インポートし直したファイルが 4,966個 → 16個 になり、Unity の部分が4分25秒 → 1分31秒に縮んだ
- 押してから終わるまでは、どちらも17〜18分。手元なら1分半ほどのビルドなので、すぐに試したいときは、手元でビルドしたほうが早い

Unity Cloud の管理の コストと使用状況 を見ると、Windows Minutes (Micro) は23分、支出は $0.00 でした。実行ファイルの名前を直したあとにもう1回ビルドしたので、ここまでで3回ぶんです。
| 料金がかかる時間 | 1分単位に切り上げると | |
|---|---|---|
| 1回目 | 8分44秒 | 9分 |
| 2回目 | 6分38秒 | 7分 |
| 3回目(名前を直したあと) | 6分31秒 | 7分 |
| 合計 | 21分53秒 | 23分 |
ビルドごとに1分単位で切り上げて数えられていました。合わせて21分53秒なのに、使った分数は23分です。短いビルドを何回もすると、切り上げのぶんが積み重なります。
Windows Micro の無料の分は月200分なので、2回目と同じぐらい(約7分)なら、月に28回ぐらいビルド出来る計算です。超えたらいくらかかるのか、GitHub Actions だけで作った場合と比べてどうなのかは、次回くわしく計算します。
スライムAIに「UBAのAPIキーを使えばいい」って教わったのに、そのキーは12月でなくなるって書いてありました・・・



サービスの仕組みは、AIが覚えたあとでも変わるの。公式のページの日付を見て、今の手順か確かめようね!



あと、ボタンを押してから17分も待つの、長いです・・・
今回の完成チェック
– Unity Cloud のプロジェクトに Build Automation と GitHub がつながっている
– ビルドターゲット windows(Windows desktop 64-bit・Windows Micro)がある
– Build を押すと成功して、ログに [BuildScript] PreExport の行が出る
– できた zip をダウンロードして、星ふる夜の庭が遊べる
次回は
次回は、お金の話です。今回測った分数をもとに、UBA の無料の分でどこまで出来るか、課金するといくらになるかを計算したいと思います!
コメント