编辑器插件数据保存之Serializable

简介:



Editor数据保存需求

做编辑器插件开发时,当打开一个窗口,对数值进行修改后,在关闭窗口或重新打开Unity时,希望能保存上次的数据。

serialization

相关知识

Serialization ,ScriptableObject

NGUI保存数据的方法

查看了下NGUI是把数据存储在EditorPrefs中,具体源码在NGUISettings.cs中的Setxxx()和Getxxx()方法。

步骤

1、创建一个C#脚本SerializeMe.cs

这个脚本作为数据保存的基类

SerializeMe.cs

复制代码
using UnityEditor;
using UnityEngine;


[System.Serializable]
public class SerializeMe : ScriptableObject
{
    [SerializeField]
    private string m_Name="test";
    [SerializeField]
    private int m_Value=5;

    public void OnGUI()
    {
        m_Name = EditorGUILayout.TextField("Name", m_Name);
        m_Value = EditorGUILayout.IntSlider("Value", m_Value, 0, 10);
    }
}
复制代码

要点

类继承自ScriptableObject,并且标识为Serializable。

m_Name和m_Value 都加上了SerializeField,(数据需要保存)

MyWindow.cs

2、创建一个C#脚本 MyWindow.cs 放在Editor目录

这个脚本的主要功能就是打开一个窗口,在OnEnable时读取上存盘的文件,并显示在窗口中

复制代码
using System.IO;
using UnityEngine;
using UnityEditor;

public class MyWindow : EditorWindow
{
    private string savePath = "Assets/Serialization_Test.asset";
    private SerializeMe m_SerialziedThing;

    [MenuItem("Window/Serialization Test")]
    static void Init()
    {
        var window=GetWindow(typeof(MyWindow));
        window.title = "Serialization Test";
        window.Show();
    }

    void OnEnable()
    {
        if (m_SerialziedThing == null)
        {
            m_SerialziedThing = ScriptableObject.CreateInstance<SerializeMe>();
        }

        if (File.Exists(savePath))
        {
            m_SerialziedThing = AssetDatabase.LoadAssetAtPath(savePath, typeof(Object)) as SerializeMe;
        }
        else
        {
            AssetDatabase.CreateAsset(m_SerialziedThing, savePath);
            AssetDatabase.SaveAssets();
        }
    }

    void OnGUI()
    {
        GUILayout.Label("Serialized Things", EditorStyles.boldLabel);
        EditorGUILayout.HelpBox("Serialized this  config save to \"Assets/Serialization_Test.asset\"",MessageType.Info);
        m_SerialziedThing.OnGUI();

        if (GUI.changed)
        {
            //存盘数据
            EditorUtility.SetDirty(m_SerialziedThing);
        }
    }
}
复制代码

使用方法

点击 Window/Serialization Test  打开窗体,修改数值后 关闭窗体,并再次打开窗体或重开Unity,可以看到还保存着还是上次的值。

 

注意事项

此功能会在Assets目录下生成一个Serialization_Test.asset的文件,这个文件保存着序列化的数据

image


本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5269052.html,如需转载请自行联系原作者

相关文章
vscode编辑器使用拓展插件background添加背景图片改变外观
vscode编辑器使用拓展插件background添加背景图片改变外观
168 0
|
6月前
|
JavaScript
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
|
3月前
|
前端开发 算法
ProFlow 流程编辑器框架问题之FlowView 组件中添加节点和边缘数据如何解决
ProFlow 流程编辑器框架问题之FlowView 组件中添加节点和边缘数据如何解决
54 0
|
5月前
|
前端开发 JavaScript PHP
【vscode编辑器插件】前端 php unity自用插件分享
【vscode编辑器插件】前端 php unity自用插件分享
37 0
|
6月前
|
前端开发 数据可视化 API
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
411 0
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
|
6月前
|
前端开发 JavaScript CDN
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(一)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
218 0
|
6月前
|
定位技术
ArcGIS中各版本ArcMap安装OpenStreetMap编辑工具集插件ArcGIS Editor for OSM
ArcGIS中各版本ArcMap安装OpenStreetMap编辑工具集插件ArcGIS Editor for OSM
203 1
|
6月前
|
算法 Java
vscode插件webgl editor阅读,入门antlr
vscode插件webgl editor阅读,入门antlr
162 0
34EasyUI 数据网格- 扩展编辑器
34EasyUI 数据网格- 扩展编辑器
40 0
|
缓存 BI Linux
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
84 0