Skip to content

Instantly share code, notes, and snippets.

@JanikHelbig
Last active April 9, 2021 14:30
Show Gist options
  • Save JanikHelbig/dd31f24939aef8724dabcfacf6e18b0d to your computer and use it in GitHub Desktop.
Save JanikHelbig/dd31f24939aef8724dabcfacf6e18b0d to your computer and use it in GitHub Desktop.
Simple utility script that allows to quickly switch to Unity build behaviour in the editor.
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
public static class PlayModeSceneMenu
{
private const string PrefKey = "PLAY_MODE_SCENE_SELECTION";
private const string Path = "Play Mode Scene/";
private const string MenuDefault = "Default (Open Scene)";
private const string MenuEmulate = "Emulate Build Behaviour";
private static string SelectedPlayModeScene
{
get => EditorPrefs.GetString(PrefKey, MenuDefault);
set => EditorPrefs.SetString(PrefKey, value);
}
[InitializeOnLoadMethod]
private static void InitializeSelection()
{
switch (SelectedPlayModeScene)
{
case MenuDefault:
SelectDefault();
break;
case MenuEmulate:
SelectEmulateBuild();
break;
}
}
private static SceneAsset GetSceneAssetByIndex(int buildIndex)
{
string path = SceneUtility.GetScenePathByBuildIndex(buildIndex);
return AssetDatabase.LoadAssetAtPath<SceneAsset>(path);
}
private static void CheckItemIfSelected(string value)
{
bool isSelected = SelectedPlayModeScene == value;
Menu.SetChecked(Path + value, isSelected);
}
[MenuItem(Path + MenuDefault)]
public static void SelectDefault()
{
EditorSceneManager.playModeStartScene = null;
SelectedPlayModeScene = MenuDefault;
}
[MenuItem(Path + MenuDefault, true)]
public static bool SelectDefaultValidator()
{
CheckItemIfSelected(MenuDefault);
return true;
}
[MenuItem(Path + MenuEmulate)]
public static void SelectEmulateBuild()
{
EditorSceneManager.playModeStartScene = GetSceneAssetByIndex(0);
SelectedPlayModeScene = MenuEmulate;
}
[MenuItem(Path + MenuEmulate, true)]
public static bool SelectEmulateBuildValidator()
{
CheckItemIfSelected(MenuEmulate);
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment