0

我有一个自定义编辑器脚本,它有一个枚举来定义应用程序是否应该启动到设置或实时模式。如果我将枚举设置为 no,当我点击播放时,应用程序在没有选择的情况下正常工作,但随后枚举恢复到是状态,当我退出播放模式时,枚举又回到是状态,并且不是播放前选择的状态。这是我的脚本。

[CustomEditor(typeof(MainController))]
public class MainControllerEditor : Editor
{
    public enum IsSetupEnabled
    {
        Yes,
        No
    };

    public IsSetupEnabled SetupEnabled;

    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        GUI.changed = false;
        var mainController = (MainController)target;

        SetupEnabled = (IsSetupEnabled)EditorGUILayout.EnumPopup("Setup Enabled", SetupEnabled);
        if (GUI.changed)
        {
            switch (SetupEnabled)
            {
                case IsSetupEnabled.Yes:
                    mainController.SetupEnabled(true);
                    break;
                case IsSetupEnabled.No:
                    mainController.SetupEnabled(false);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }

        if (GUILayout.Button("Validate Configuration"))
        {
            mainController.Validate();
        }
    }
}

当我找到其他人遇到的这个问题的解决方案时,我尝试将枚举标记为 Serializable 以及在 Gui.Changed 中将 mainController 标记为脏,但它似乎对我没有任何作用。

4

2 回答 2

1

您可以将 SetupEnabled 变量从 MainControllerEditor 移动到 MainController。

然后它会被内置的序列化序列化、保存和加载。

public enum IsSetupEnabled
{
    Yes,
    No
};

public IsSetupEnabled SetupEnabled;

为了使您的变量不显示在检查器中(但被序列化)并且不在运行时执行:

#if UNITY_EDITOR
public enum IsSetupEnabled
{
    Yes,
    No
};

[HideInInspector]
public IsSetupEnabled SetupEnabled;
#endif
于 2018-09-12T17:41:05.257 回答
1

MainControllerEditor 类没有序列化,没有地方。所以状态

public IsSetupEnabled SetupEnabled;

每次创建 MainControllerEditor 的新实例时都会重置。如果您想存储一些数据,您需要在 MainController 类中进行(并且它将被序列化为预制件或保存在场景中)或使用 Playerprefs/EditorPrefs

public override void OnInspectorGUI()
{
    DrawDefaultInspector();
    GUI.changed = false;
    var mainController = (MainController)target;
    mainController.SetupEnabled=GUILayout.Toggle(mainController.SetupEnabled);
}
于 2018-08-21T06:59:02.023 回答