Editor数据保存需求

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

相关知识

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=; public void OnGUI()
{
m_Name = EditorGUILayout.TextField("Name", m_Name);
m_Value = EditorGUILayout.IntSlider("Value", m_Value, , );
}
}

要点

类继承自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的文件,这个文件保存着序列化的数据

编辑器插件数据保存之Serializable的更多相关文章

  1. WordPress插件制作教程(四): 将数据保存到数据库

    上一篇讲解了添加菜单的方法,这一篇为大家讲解如何将数据保存到数据库中,并且显示在页面上,不会因提交表单时刷新页面输入框中内容消失.要实现这一功能我们需要借助WordPress函数来实现,下面就来讲解具 ...

  2. extjs_04_grid(弹出窗口&amp;行编辑器 CRUD数据)

    1.弹出窗口(添加.删除) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/f ...

  3. 百度umeditor富文本编辑器插件扩展

    富文本编辑器在WEB开发中经常用到,个人比较喜欢用百度出的ueditor这款,ueditor这款本身支持插件扩展的,但是ueditor的mini版本 umeditor 就没有那么方便了,不过找了很多资 ...

  4. vue-quill-editor 富文本编辑器插件介绍

    Iblog项目中博文的文本编辑器采用了vue-quill-editor插件,本文将简单介绍其使用方法. 引入配置 安装模块 npm install vue-quill-editor --save in ...

  5. Delphi:ClientDataset+TDataSetProvider的数据保存问题

    看到一篇介绍ClientDataSet和TDataSetProvider,非常精彩,特此保存. ==================================================== ...

  6. jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用

    jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...

  7. Python小数据保存,有多少中分类?不妨看看他们的类比与推荐方案...

    小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何 ...

  8. Hibernate数据保存操作方法的原理对比

    Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session Al ...

  9. java大并发数据保存方案

    做了几年.net,如今终于要做java了. 需求: 线下终端会定时上传gps位置到服务端,服务端收到数据保存到mysql数据库,当线下终端过多时,问题出现了,首当其冲的是数据库连接池经常会崩溃,单个t ...

随机推荐

  1. AH00098 pid file overwritten

    错误日志: 由于定义了: <IfModule mpm_winnt_module> ThreadsPerChild 450 MaxConnectionsPerChild 4000 Accep ...

  2. 如何保护在Autodesk应用程序商店的应用不被盗版 - 1

    Autodesk应用程序商店如火如荼,但来自中国的应用却还是寥寥无几.大家在担心什么呢?可能其中一个因素就是担心自己的应用上线后被盗版的问题.对应用的版权保护和授权管理是每个应用开发者都应该认真考虑的 ...

  3. 修改 Android 5.x 系统默认音量大小

    修改系统默认音量需要改两处地方: 1. frameworks\base\media\java\android\media\AudioManager.java /** @hide Default vol ...

  4. windows svn 上传后 自动部署 到web目录下

    第一步 把web目录设置为工作目录 "D:\Program Files (x86)\VisualSVN Server\bin\svn.exe" upgrade "D:\y ...

  5. Tomcat+Nginx+Lvs部署方案与性能调优

    立项要求:用户登录并发数达到1000vuser.原项目设计没有Nginx和LVS,经过性能测试并发数最高到400,就报响应超时,且系统资源消耗严重.经过和架构师商议决定先加入Nginx解决负载均衡处理 ...

  6. MySQL 数据库双向镜像、循环镜像(复制)

    在MySQL数据库镜像的贴子中,主数据库A 的数据镜像到从数据库B,是单向的,Zen Cart网店的数据读写都必须在数据库A进行,结果会自动镜像到数据库B中.但是对数据库B的直接操作,不会影响数据库A ...

  7. 从多个XML文档中读取数据用于显示webapi帮助文档

    前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...

  8. Spring整合Junit4

    1.加入相应依赖包 junit4-4.7.jar 以及spring相关jar包 2.在测试代码的源码包中如 src/test/java 新建一个抽象类如下 import org.junit.runne ...

  9. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  10. 使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

    在学习python开发框架pylons/pyramid的过程中,里面有个非常棒的页面性能监控功能,这样在开发过程中,你能清楚的知道当前页面的性能以及其它参数. 这里介绍一下如何给Asp.net MVC ...