MRが楽しい

MRやVRについて学習したことを書き残す

Unityのプロジェクトでビルドプラットフォームをスクリプトで固定する

本日は Unity の小ネタ枠です。
Unityのプロジェクトでビルドプラットフォームをスクリプトで固定する方法についてです。

ビルドプラットフォームをスクリプトで指定する

ビルドプラットフォームをスクリプトで指定する場合は EditorUserBuildSettings.SwitchActiveBuildTarget 関数を利用できます。
docs.unity3d.com

引数の BuildTargetGroup でビルドプラットフォームを指定します。
BuildTarget では Standalone プラットフォームを指定したとき、更に WindowsMac などの細かな OS 指定を行います。
docs.unity3d.com
docs.unity3d.com

因みに BuildTargetGroup = Standalone かつ BuildTarget = Android など不可能な組み合わせを指定した場合はエラーが発生します。

サンプルスクリプト

以下のサンプルスクリプトを作成しました。
起動時に指定のプラットフォーム(本スクリプトでは Standalone - Windows64bit)に切り替えた後、他のプラットフォームに切り替わらないように監視し続けます。
・EditorUpdateTest.cs

using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;

// InitializeOnLoadをつけるとUnityEditorが起動したとき、または
// スクリプトがコンパイルされた直後に静的コンストラクタが自動的に実行されます
[InitializeOnLoad]
public class SwitchPlatformTest : MonoBehaviour
{
    private const BuildTarget ProjectBuildTarget = BuildTarget.StandaloneWindows64;
    private const BuildTargetGroup ProjectBuildTargetGroup = BuildTargetGroup.Standalone;
    
    static SwitchPlatformTest()
    {
        // プラットフォームを  Standalone の Windows 64bit 向けに変更する
        EditorUserBuildSettings.SwitchActiveBuildTarget(ProjectBuildTargetGroup, ProjectBuildTarget);
        
        // エディターの監視処理を登録する
        EditorApplication.update += Update;
    }
    
    private static void Update()
    {
        // 指定のプラットフォーム以外が選択された場合はすぐに元に戻す
        if (EditorUserBuildSettings.selectedBuildTargetGroup != ProjectBuildTargetGroup)
        {
            EditorUserBuildSettings.selectedBuildTargetGroup = ProjectBuildTargetGroup;
        }
        
        if (EditorUserBuildSettings.selectedStandaloneTarget != ProjectBuildTarget)
        {
            EditorUserBuildSettings.selectedStandaloneTarget = ProjectBuildTarget;
        }
    }
}
#endif

動作確認

スクリプトを作成してコンパイルが走ると、プラットフォームが Standalone の Windows 64bit 向けに切り替わります。
その後、BuildSettings から別のプラットフォームを選択しようとしても選択できないようにできました。