Можно ли помешать Unity изменить режим воспроизведения после того, как пользователь нажал кнопку?
Допустим, у меня есть собственный редактор, который может иметь состояние, которое не может быть правильно сериализовано;если в этот момент пользователь изменит режим Unity Editor, его изменения будут потеряны.
Это возможность полностью избавиться от несериализуемого состояния, но это задача совершенно другой сложности.Хотелось бы избежать этого.
UPD:
Я проверил ответ derHugo с помощью следующего сценария:
using UnityEditor;
using UnityEngine;
namespace Innoactive.Hub.Training.Editors
{
[InitializeOnLoad]
public class ProveThatDudeWrongWindow : EditorWindow
{
private static ProveThatDudeWrongWindow windowInstance;
private string notSerializedString = "default";
static ProveThatDudeWrongWindow()
{
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
}
[MenuItem("Test/I'm damn sure he's wrong")]
private static void MenuItem()
{
if (windowInstance == null)
{
windowInstance = GetWindow<ProveThatDudeWrongWindow>();
}
windowInstance.notSerializedString = "some value";
}
[MenuItem("Test/Display current value")]
private static void DisplayCurrentNonSerializedValue()
{
windowInstance = GetWindow<ProveThatDudeWrongWindow>();
Debug.Log("string: " + windowInstance.notSerializedString);
}
private static void OnPlayModeStateChanged(PlayModeStateChange state)
{
if (state == PlayModeStateChange.ExitingEditMode)
{
EditorApplication.isPlaying = false;
}
Debug.Log("state: " + state);
}
}
}
Затем я сделал следующее:
- Нажмите опцию
Test/I'm damn sure he's wrong
, чтобы установить несериализованное значение от default
значение до some value
- Нажмите
Test/Display current value
, чтобыубедитесь, что значение изменено - Нажмите кнопку воспроизведения
- Нажмите
Test/Display current value
, чтобы увидеть текущее значение.Если это default
, решение derHugo не работает, если оно some value
, оно работает.
Результат: derHugo круто.