1. サイトトップ
  2. ブログ
  3. Unity
  4. 【Unity】Unity6から追加されたBuild Profilesを活用してみた

【Unity】Unity6から追加されたBuild Profilesを活用してみた

挨拶

ブログをご覧の皆さん。

ロジカルビート情熱開発部プログラム課の若尾です。

こんにちは。

Hello, I`m Wakao.

안녕하세요, 와카오입니다.

สวัสดี ฉันชื่อวาคาโอะ

مرحباً، أنا واكاو.

といった感じに同じ挨拶でもいろいろな言語や方法がありますよね。

Unityでも同じビルドでも細かい違いの使い分けをしたいというときがありますよね。

ということで、Unity6から追加されたBuild Profilesを活用して様々なケースでのビルドを試してみました。

今回の検証環境です。

  • OS:Windows 11 Pro 64 ビット
  • CPU:Intel(R) Core(TM) i7-10875H
  • GPU:NVIDIA GeForce RTX 2060
  • Unity 6000.0.58f2 (Unity6)

BuildProfilesの紹介

ここからはBuildProfilesの追加方法と利用例を紹介します。

BuildProfiles追加方法(Windowsでの例)

  1. File->BuildProfilesをクリックして,BuildProfilesのウィンドウを表示します.
  1. AddBuildProfileをクリックします.
  1. PlatformBrowserにてWindowsを選択し、AddBuildProfileをクリックします.

これでBuildProfilesウィンドウのPlatformsの項目の下にBuildProfileが追加されるのを確認できます。

同じプラットフォームでDebug版,Release版を分けて作成

これまでのUnityでは、デバッグ(Debug)版のビルドと本番用(Release)版のビルドをUnityエディタ上でビルドする場合

その都度 “Development Build”などのチェック項目を手動で切り替える必要がありました。

これは下記のような問題が発生する可能性がある状態でした。

  • Development Buildなど,様々なチェック項目を切替を行うのでチェック漏れが発生する
  • ビルドするsceneを必要に応じて切り替えたい場合、都度書き込みが必要
  • その他、変更箇所について煩雑になると属人的になり難しくなってしまう

BuildProfilesではこれらの項目を一度保存すれば

Unityの設定ファイルに保存されるので,何度も設定を切り替える必要がなくなり

チームでの開発においても共有・引継ぎがしやすくなります。

保存される個所は

Assets/Settings/Build Profiles/{ビルドプロファイル名}.asset として保存されます。

下図のように様々なバージョンに応じてBuildProfilesを用意できます。

特別なバージョン作成

先日東京ゲームショウ2025に弊社ロジカルビートから

BOM BOM BOMBIAN ~ ボン ボン ボンビアン

を出展しておりました。

そこで,東京ゲームショウ展示向けの設定をビルドしました。このときもBuildProfilesを使ってビルドしてます。

具体的にはScriptingDefinesに”FOR_TGS”というDefineがtrueになるように設定をして

シーンやゲームのルールなどを展示向けにオーバーライドできるようにしました。

こうすることで、チームの制作に影響を最小限に抑えられ

かつ、展示に向けての実装を進められたので、開発の運用も便利でした。

ビルドマシン向けにビルド命令を作成

BuildProfilesはjenkinsなどビルドマシン用にCIとして利用することも勿論可能です。

jenkinsを使ったUnityのビルドについて、是非下記の弊社ブログの記事をご参照ください。

Unity6ではビルドオプションのコマンド引数に,”BuildProfileの名前”を与えることで

そのBuildProfileを参照してビルドを行うことが出来ます。

CI上でビルドをするように枠組みをするという点は以前と変わりないですが

実際のビルド設定をBuildProfilesというGUI上で設定できるという点が、メリットになっています。

WindowsBatの例

UnityのEditorパスに対して,batchmodeでビルドを呼び出す例を紹介します。

REM UNITY_PATH,PROJECT_PATHは便宜変更してください.BUILD_PROFILEが今回作成したBuildProfilesの名前を渡す部分です.
%UNITY_PATH% -batchmode -quit -projectPath %PROJECT_PATH% -executeMethod Build.Execute -buildProfile %BUILD_PROFILE% -logFile -

続いて,Unityのビルド関数をオーバーライドして上述したコマンドが有効になるようにプロジェクトに下記のC#スクリプトを作成します。

using System.Diagnostics;
using System.Linq;
using UnityEditor;
using UnityEditor.Build.Profile;
using UnityEngine;

public class Build
{
   [MenuItem("Application/Build")]
   public static void Execute()
   {
      // コマンドライン引数からBuildProfle名を取得
      string buildProfileName = GetBuildProfileName();

      // タイトル名を取得
      string productName = PlayerSettings.productName;

      // BuildProfileを読み込み
      string profilePath = $"Assets/Settings/Build Profiles/{buildProfileName}.asset";
      BuildProfile buildProfile = AssetDatabase.LoadAssetAtPath<BuildProfile>(profilePath);

      // Scripting Defines を取得して判定
      var defines = buildProfile.scriptingDefines.ToArray();
      // -- 生成パス制作
      string outputPath = $"{buildProfileName}/{productName}";
      outputPath = "../OutputRoms/" + outputPath;


      // ビルドオプション設定
      BuildPlayerWithProfileOptions buildPlayerWithProfileOptions = new BuildPlayerWithProfileOptions
      {
         // BuildProfileを指定
         buildProfile = buildProfile,
         // outputPathを指定
         locationPathName = outputPath
      };

      // アプリビルド実行
      BuildPipeline.BuildPlayer(buildPlayerWithProfileOptions);
   }

   /// <summary>
   /// コマンドライン引数から-buildProfileオプションを取得
   /// </summary>
   private static string GetBuildProfileName()
   {
      string[] args = System.Environment.GetCommandLineArgs();
      string buildProfile = null;

      for (int i = 0; i < args.Length; i++)
      {
         if (args[i] == "-buildProfile" && i + 1 < args.Length)
         {
            buildProfile = args[i + 1];
            break;
         }
      }

      if (string.IsNullOrEmpty(buildProfile))
      {
         UnityEngine.Debug.LogError("Build profile is not specified.");
      }

      return buildProfile;
   }
}


上記のスクリプトコードは下記のページを参考にさせていただきました。
Unity6 の batchmode で BuildProfile を切り替えてビルドする

異なるプラットフォームを連続してビルドする

jenkinsのようにビルドのパイプラインを組むことで

Aというプラットフォームをビルド→Bというプラットフォームをビルド

といった順番にビルド命令をすることができます。

ただ、私の環境においてBのプラットフォームに切り替えた際に

本来必要なプラットフォーム依存ファイル(dllなど)が正しく読み込まれずビルド出来ないという事態が発生してました。

UnityEditorにて,BuildProfilesを切り替えた後であればこの問題を解決できることが確認できました。

そこで,一度EditorでBuildProfilesを切り替えたかのような命令をすればよいのでは? という仮説を立てて,検証したところ

無事ビルドが出来るようになりました。

今回はその例も記述します。

UnityChangeProfileで一度プロファイルを切り替える

ビルドに実行前にこれから紹介する方法を用いて,プロファイルの切り替えを行います。

先ほどと同じようにWindowsBatでも利用できるような命令文とスクリプトの紹介です。

%UNITY_PATH% -projectPath %PROJECT_PATH% -batchmode -executeMethod SetupProjectForBuild.Run -buildProfile %BUILD_PROFILE% -quit -logFile -

今回は下記C#スクリプトを追加しました。

using UnityEditor;
using UnityEditor.Build.Profile;

public static class SetupProjectForBuild
{
    public static void Run()
    {
        // コマンドライン引数からBuildProfle名を取得
        string buildProfileName = GetBuildProfileName();

        // BuiildProfile名で判定
        if (buildProfileName.Contains("Windows"))
        {
            EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64);
        }
        // Windows以外の例としてAndroidとして取得
        else if (buildProfileName.Contains("Android")) 
        {
            EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Switch, BuildTarget.Android);
        }

        // プロジェクトを終了(.csproj をこのタイミングで再生成)
        EditorApplication.Exit(0);
    }

    /// <summary>
    /// コマンドライン引数から-buildProfileオプションを取得
    /// </summary>
    private static string GetBuildProfileName()
    {
        string[] args = System.Environment.GetCommandLineArgs();
        string buildProfile = null;

        for (int i = 0; i < args.Length; i++)
        {
            if (args[i] == "-buildProfile" && i + 1 < args.Length)
            {
                buildProfile = args[i + 1];
                break;
            }
        }

        if (string.IsNullOrEmpty(buildProfile))
        {
            UnityEngine.Debug.LogError("Build profile is not specified.");
        }

        return buildProfile;
    }
}

これにより、無事 Aというプラットフォームをビルド→Bというプラットフォームをビルド を連続で行うことが出来ました。

終わりに

BuildProfilesでは複数のプラットフォームの中で同一のプラットフォームでも異なる設定を

UnityEditor上で設定できるというのが魅力です。

今回紹介した,Debug用・Release用・展示用といった用途以外にも様々な用途で利用できそうです。

アセットファイルとして保存され,Unityのプロジェクトを複製するような必要がないのもメリットかなと感じました。

BOM BOM BOMBIAN ~ ボン ボン ボンビアン

セナとペグと不思議な塔

これらの作品も,BuildProfilesをうまく活用している…かも

是非チェックしてみてください!


【免責事項】

本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。