- Home /
Question by
Xavier78 · Apr 22, 2017 at 11:53 PM ·
editormenuitempersistent
MenuItem toggle getting reset on play.
I have a menu item that is a toggle, it works fine, but it seems that on play the editor refreshes, and doesn't set the menuitem check mark, even though the menuitem value is still true, which is EditorApplication.delayCall not working? it seems like all delages get cleared on play, becuase if you use EditorApplication.Update and hit it while in play mode, it still is called in editor mode, but if you hit playmode again it stops.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class PercistanceMenuItem
{
private const string MENU_PATH = "Percistence/'test mode' -> 'Editor' percistent";
private static bool enabled_ = false;
static PercistanceMenuItem() {
PercistanceMenuItem.enabled_ = EditorPrefs.GetBool( PercistanceMenuItem.MENU_PATH , false);
/// Delaying until first editor tick so that the menu
/// will be populated before setting check state, and
/// re-apply correct action
EditorApplication.delayCall += () => {
PerformAction( PercistanceMenuItem.enabled_);
};
}
[MenuItem( PercistanceMenuItem.MENU_PATH, false)]
private static void ToggleAction() {
Debug.Log("before : " + enabled_);
/// Toggling action
Menu.SetChecked( PercistanceMenuItem.MENU_PATH , enabled_);
PerformAction( ! PercistanceMenuItem.enabled_);
Debug.Log("after : " + enabled_);
}
public static void PerformAction(bool enabled) {
/// Set checkmark on menu item
Menu.SetChecked( PercistanceMenuItem.MENU_PATH , enabled);
/// Saving editor state
EditorPrefs.SetBool( PercistanceMenuItem.MENU_PATH , enabled);
PercistanceMenuItem.enabled_ = enabled;
/// Perform your logic here...
}
}
Comment
Your answer
Follow this Question
Related Questions
Repaint EditorSettings inspector from custom menu item 1 Answer
How do I add a MenuItem to Hierarchy's Create Menu? 2 Answers
Editor Scripting Question 1 Answer
Can I create MenuItem from code? 3 Answers