#Unity のCLIでゲームとAddressablesアセットをビルドしてみた

2023.01.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、ゲームソリューショングループの入井です。

UnityでCI/CDを行いたい場合、公式が用意しているCloudBuildを使用するのが最もポピュラーな方法になると思われます。

Unity Cloud Build - Unity マニュアル

または、オープンソースのビルドツールであるGameCIをCircleCI等で動かすという方法もあるでしょう。

GameCI · The fastest and easiest way to automatically test and build your game projects

一方で、ローカル環境上でCLI環境でビルドなどを手軽に行いたい場合は、Unityをコマンドで実行する必要があります。

今回は、UnityのゲームビルドをCLI経由で行う方法を書いていきます。

実行環境

  • Windows11
    • 検証時点(2023/01/17)の最新のアップデート適用
  • Unity 2021.3.16f
    • Addressables 1.19.19

ビルド用コード

コマンドによるビルドを行うためには、その手順を書いたC#コードをプロジェクトディレクトリ内に書く必要があります。

以下のコードをAssets/Editor内に保存します。なお、Editorディレクトリ以外に保存すると実行時にエラーが起きるため注意してください。

using UnityEditor;

public class Builder
{
    public static void Build()
    {
        // Addressablesのビルド
        UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.BuildPlayerContent();

        // ビルド対象のシーンを配列内に指定
        string[] scenes =
        {
            "Assets/Scenes/SampleScene.unity"
        };

        // ビルドオプション
        var options = new BuildPlayerOptions
        {
            target = BuildTarget.StandaloneWindows64,
            locationPathName = "Build/Test.exe",
            scenes = scenes
        };

        // ビルド実行
        BuildPipeline.BuildPlayer(options);
    }
}

Addressablesのビルド

AddressableAssetSettings.BuildPlayerContent()にて、Addressableseで管理しているアセットのビルドを行っています。

Addressableseについては、以下の記事や公式のガイドを参照してください。

#Unity の Addressablesを使ってAWSのS3上のアセットデータをCloudFront経由でロードしてみた | DevelopersIO

Addressables でコンテンツ管理を簡素化する | ビデオゲーム開発 | Unity

単純にこのメソッドを実行するだけだと、Unityエディタで指定した設定でビルドが行われます。

前段で設定関係のコードを書くことで、細かな設定を変更したり別の設定ファイルを読み込むなどビルドのカスタマイズが行えます。

Build scripting | Addressables | 1.19.19

ゲームのビルド

BuildPipeline.BuildPlayer(options)にて、ゲーム本体のビルドを行っています。前段では、ビルドについての設定を指定する必要があります。

targetには、ビルドをどのプラットフォームに向けて行うかを指定します。上記コードでは、64bit Windows環境を指定しています。

locationPathNameには、ビルドの結果を書き出すパスを指定します。パスの起点は、対象のUnityプロジェクトが保存されているディレクトリになります。

scenesには、ビルド対象のシーンを文字列配列で指定します。上記コードでは、Assets/Scenes/SampleScene.unityというデフォルトで作られるシーンのみを指定しています。

最低限、上記の設定がしてあればビルドの実行が可能です。

その他の設定項目等については公式ドキュメントを参照してください。

Unity - Scripting API: BuildPlayerOptions

コード実行用コマンド

ビルド用コードが用意できたら、コマンドでUnityを実行します。以下は、Windows環境で実行する場合の例です。

"C:\Program Files\Unity\Hub\Editor\2021.3.16f1\Editor\Unity.exe"
 -batchmode
 -quit
 -projectPath .
 -logfile build.log
 -executeMethod Builder.Build

実行対象として、Unityのexeファイルを指定します。

batchmodequitオプションにより、Unityエディタを起動することなく処理が完了します。

projectPathオプションでは、処理を行う対象のプロジェクトを相対パスで指定します。

logfileオプションにより、コマンドの実行ログを書き出す先を指定します。

executeMethodオプションで、実行するC#メソッドを指定します。

その他のコマンドオプションは公式ドキュメントを参照してください。

コマンドライン引数 - Unity マニュアル

実行結果

プロジェクトディレクトリ下のBuildディレクトリに以下のようにゲームビルドの結果が書き出されます。この時、予めBuildディレクトリを作成していないとビルドエラーが起きるためご注意ください。

Addressablesのアセットのビルド結果については、設定で指定した通りの場所に書き出されます。標準では、プロジェクトディレクトリ下のServerDataディレクトリ内です。

まとめ

CLIでUnityのビルドを行うことができました。

なお、今回書いたコードは、GameCIでもオプションでメソッドを指定することで実行が可能なため、CircleCIなどのCI/CDツールでも実行が可能です。

Builder | GameCI

この記事では最低限の設定しか行なっていませんが、コードをカスタマイズすることにより細かくビルドの内容を調整することが可能なため、うまく活用すれば手動で行なっていたビルドの自動化ができるようになるでしょう。