编辑器插件数据保存之Serializable
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的更多相关文章
- WordPress插件制作教程(四): 将数据保存到数据库
上一篇讲解了添加菜单的方法,这一篇为大家讲解如何将数据保存到数据库中,并且显示在页面上,不会因提交表单时刷新页面输入框中内容消失.要实现这一功能我们需要借助WordPress函数来实现,下面就来讲解具 ...
- extjs_04_grid(弹出窗口&行编辑器 CRUD数据)
1.弹出窗口(添加.删除) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/f ...
- 百度umeditor富文本编辑器插件扩展
富文本编辑器在WEB开发中经常用到,个人比较喜欢用百度出的ueditor这款,ueditor这款本身支持插件扩展的,但是ueditor的mini版本 umeditor 就没有那么方便了,不过找了很多资 ...
- vue-quill-editor 富文本编辑器插件介绍
Iblog项目中博文的文本编辑器采用了vue-quill-editor插件,本文将简单介绍其使用方法. 引入配置 安装模块 npm install vue-quill-editor --save in ...
- Delphi:ClientDataset+TDataSetProvider的数据保存问题
看到一篇介绍ClientDataSet和TDataSetProvider,非常精彩,特此保存. ==================================================== ...
- jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用
jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...
- Python小数据保存,有多少中分类?不妨看看他们的类比与推荐方案...
小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何 ...
- Hibernate数据保存操作方法的原理对比
Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session Al ...
- java大并发数据保存方案
做了几年.net,如今终于要做java了. 需求: 线下终端会定时上传gps位置到服务端,服务端收到数据保存到mysql数据库,当线下终端过多时,问题出现了,首当其冲的是数据库连接池经常会崩溃,单个t ...
随机推荐
- AE_复制当前图层
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { int layercount = axMapControl2. ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- SQL for SQLite
语法 verb + subject + predicate commannds(命令) SQL由命令组成,以分号为结束.命令有token组成,token由white space分隔,包括空格.tab. ...
- 使用TextKit
使用TextKit TextKit是在iOS7中新出的,实现了对CoreText的封装,使用起来更加方便. 虽然是新出的,但也不代表立马就能上手-_-!!,TextKit可以实现图文混排效果,很好用. ...
- OSX常用快捷键
编辑类 cmd+c复制 cmd+x剪切 cmd+v粘贴 cmd+s保存 cmd+z撤销 文件类 cmd+c cmd+v文件的复制粘贴 cmd+c cmd+ ...
- zend studio 使用总结
1 修改中文字体打开zend studio -> Window -> Preferences -> General -> Apperance -> Colors and ...
- Dex Loader] Unable to execute dex: Multiple dex files define
在打包的过程中可能会出现这样的问题,原因是有重复的.jar被引用,可以查看你的build path或Java build path,尤其是Android Dependencies等相关android包 ...
- linux 学习随笔-group和user管理
1:/etc/passwd 打开该文件,可以看到每一行内容被分割成了7个字段比如:root:x:0:0:root:/root:/bin/bash 第一个字段表示用户名为root用户 第二个字段存放了该 ...
- Java Se:Java Security
Java API中有很多都使用了SecurityManager,这到底是什么玩意?最近看公司的产品的源码,也有不少SecurityManager.AccessControlContext等相关的代码, ...
- XML 在SQLServer中的使用
SQL Server对于XML支持的核心在于XML数据的格式,这种数据类型可以将XML的数据存储于数据库的对象中,比如variables, columns, and parameters.当你用XML ...