Skip to content

Instantly share code, notes, and snippets.

@CSaratakij
Created April 24, 2024 17:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CSaratakij/bf6e7eb0108e963c59c833ad5a9f7a0a to your computer and use it in GitHub Desktop.
Save CSaratakij/bf6e7eb0108e963c59c833ad5a9f7a0a to your computer and use it in GitHub Desktop.
Quick change unity player setting build type from Mono to IL2CPP menu item "Help/Quick change build type/..."
using UnityEditor;
public static class QuickChangeBuildTypeMenu
{
private const int MENU_ITEM_PRIORITY = -1;
private const string PATH_MENU_MONO = "Help/Quick change build type/Mono";
private const string PATH_MENU_IL2CPP = "Help/Quick change build type/IL2CPP";
private enum BuildType
{
Mono,
IL2CPP
}
[MenuItem(PATH_MENU_MONO, true)]
private static bool ValidateChangeToMonoBuildMenu()
{
bool shouldCheckedMenu = IsUseCurrentBuildType(BuildType.Mono);
Menu.SetChecked(PATH_MENU_MONO, isChecked: shouldCheckedMenu);
return true;
}
[MenuItem(PATH_MENU_IL2CPP, true)]
private static bool ValidateChangeToIL2CPPBuildMenu()
{
bool shouldCheckedMenu = IsUseCurrentBuildType(BuildType.IL2CPP);
Menu.SetChecked(PATH_MENU_IL2CPP, isChecked: shouldCheckedMenu);
return true;
}
[MenuItem(PATH_MENU_MONO, false, MENU_ITEM_PRIORITY)]
private static void ChangeToMonoBuildMenu()
{
ChangeBuildType(BuildType.Mono);
}
[MenuItem(PATH_MENU_IL2CPP, false, MENU_ITEM_PRIORITY)]
private static void ChangeToIL2CPPBuildMenu()
{
ChangeBuildType(BuildType.IL2CPP);
}
private static void ChangeBuildType(BuildType buildType)
{
BuildTargetGroup currentBuildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
switch (buildType)
{
case BuildType.Mono:
{
PlayerSettings.SetScriptingBackend(currentBuildTargetGroup, ScriptingImplementation.Mono2x);
PlayerSettings.SetManagedStrippingLevel(currentBuildTargetGroup, ManagedStrippingLevel.Disabled);
AssetDatabase.SaveAssets();
}
break;
case BuildType.IL2CPP:
{
PlayerSettings.SetScriptingBackend(currentBuildTargetGroup, ScriptingImplementation.IL2CPP);
PlayerSettings.SetManagedStrippingLevel(currentBuildTargetGroup, ManagedStrippingLevel.Minimal);
AssetDatabase.SaveAssets();
}
break;
}
}
private static bool IsUseCurrentBuildType(BuildType buildType)
{
BuildTargetGroup currentBuildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
ScriptingImplementation currentScriptingImplementation = PlayerSettings.GetScriptingBackend(currentBuildTargetGroup);
return buildType switch
{
BuildType.Mono => (currentScriptingImplementation == ScriptingImplementation.Mono2x),
BuildType.IL2CPP => (currentScriptingImplementation == ScriptingImplementation.IL2CPP),
_ => false
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment