【发布时间】:2018-12-27 18:26:27
【问题描述】:
是否可以阻止Unity在用户按下按钮后改变播放模式?
假设我有一个自定义编辑器,它的状态可能无法正确序列化;如果用户此时更改 Unity Editor 模式,他们的更改将丢失。
完全摆脱不可序列化状态是一种选择,但这是完全不同复杂性的任务。希望避免这种情况。
UPD:
我已经使用以下脚本测试了derHugo's answer:
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 很酷。
【问题讨论】:
标签: unity3d