编辑器插件数据保存之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,如需转载请自行联系原作者

相关文章
|
8月前
|
JavaScript
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
770 0
|
8月前
|
IDE Java 程序员
没有颜值插件的编辑器是没有灵魂的--【idea-theme插件】
没有颜值插件的编辑器是没有灵魂的--【idea-theme插件】
|
11月前
|
JavaScript 前端开发 程序员
推荐三个神级VSCode插件[jupyter中写javascript,替代typora的markdown编辑器,记录敲代码时间的插件]
使用过Python的朋友应该都知道Jupyter-Notebook,因为它对新手朋友学习Python可谓是绝佳的工具,对Python老手来说使用它来写一些小Demo或者绘图分析都是非常不错的工具,我们都知道,最近,我开始了深入学习JavaScript的路途,偶尔为敲一下js来验证书中的说法以及自己的想法,同时可能会记一下笔记,然后可能还需要刷Leetcode
540 0
|
JavaScript
在vscode编辑器里使用leetcode插件刷题
在vscode编辑器里使用leetcode插件刷题
834 0
在vscode编辑器里使用leetcode插件刷题
|
JavaScript
vue项目中如何使用markdown编辑器插件
vue项目中如何使用markdown编辑器插件
395 0
|
Python
Python编程:sublime编辑器python开发必装插件
Python编程:sublime编辑器python开发必装插件
149 0
【Atom】使用markdown编辑器需要的插件
【Atom】使用markdown编辑器需要的插件
136 0
|
开发工具
【开发工具】还在发愁编辑器重新安装的痛苦吗?Atom一键恢复插件
【开发工具】还在发愁编辑器重新安装的痛苦吗?Atom一键恢复插件
87 0
使用HBuilder X编辑器安装终端窗口插件未响应的解决方案
使用HBuilder X编辑器安装终端窗口插件未响应的解决方案
Unity3D原生编辑器的界面太丑?那就试试这款插件吧
是否已经看厌了Unity一成不变的白灰色了?现在给大家带来一个可以更换Unity的主题颜色的插件,下面就让我们来看看怎么使用吧