Unity获取脚本的CustomEditor(自定义编辑)数据
在此之前,粗略的介绍下 CustomEditor(自定义编辑)。
Unity对于我们创建的Mono脚本提供了属性面板的展示和修改。默认情况下,Inspector面板中会显示当前脚本类的公开字段(public field),这些字段会被序列化并储存在挂载的预制上。而有些情况下我们需要自定义展示和修改面板数据展示,这时候就用到了Unity提供的CustomEditor。
CustomEditor特性:允许我们自定义当前脚本组件的Inspector检视面板。
使用方法:
1 public CustomEditor(Type inspectedType);
2 public CustomEditor(Type inspectedType, bool editorForChildClasses);
参数介绍:
inspectedType:指定自定义那个类型的面板数据
editorForChildClasses :是否子类使用同样的自定义面板,默认不使用
使用示例片段:
//TestData.cs using UnityEngine;
/// <summary>
/// 测试代码
/// </summary>
public class TestData : MonoBehaviour
{
[Range(0,1)]
public float speed;
} //TestDataEditor.cs using UnityEditor; /// <summary>
/// 测试代码,自定义面板数据显示
/// </summary>
[CustomEditor(typeof(TestData))]
public class TestDataEditor : Editor
{
private SerializedProperty _speed;
TestData _target; private void OnEnable()
{
///方式一
_speed = serializedObject.FindProperty("speed"); ///方式二
//_target = (TestData)target;
} public override void OnInspectorGUI()
{
//将_speed数据修改加入监听
EditorGUI.BeginChangeCheck(); /// 方式一
serializedObject.Update();
EditorGUILayout.PropertyField(_speed);
serializedObject.ApplyModifiedProperties(); ///方式二
//_target.speed = EditorGUILayout.FloatField("速度", _target.speed); //_speed数据修改结束监听,并在发生修改时,做“脏”标记
if (EditorGUI.EndChangeCheck())
{
EditorUtility.SetDirty(target);
}
}
}
在开发过程中,为了给其他同学提供一些便利,通过自定义显示面板数据是很常见的一件事。但这会导致我们有时直接获取的当前组件数据时,发现不是面板上序列化储存的值。出现这种原因是因为Editor这边直接执行了ApplyModifiedProperties,这时候我们可以通过序列化对象获取想要的数据。
using UnityEngine;
using UnityEditor; /// <summary>
/// 测试代码
/// </summary>
public class TestData : MonoBehaviour
{
[Range(0,1)]
public float speed; /// <summary>
/// 根据使用场景调用方法
/// </summary>
private void TestFunc()
{
//序列化当前对象
SerializedObject obj = new SerializedObject(this);
//查找想要的数据
var _speed = obj.FindProperty("speed");
//进行日志输出或GUI绘制
Debug.LogError($"原始数据:{speed},序列化后的数据:{_speed}");
}
}
总结:我们要想在编辑器这边获取CustomEditor(自定义编辑)类的序列化数据时,只需要将当前类对象序列化即可。
资料查找:
1).Unity - Scripting API: CustomEditor
2).Unity - Scripting API: CustomEditor.CustomEditor
Unity获取脚本的CustomEditor(自定义编辑)数据的更多相关文章
- Unity场景道具模型拓展自定义编辑器
(一)适用情况 当游戏主角进入特定的场景或者关卡,每个关卡需要加载不同位置的模型,道具等.这些信息需要先在unity编辑器里面配置好,一般由策划干这事,然后把这些位置道具信息保存在文件,当游戏主角进入 ...
- Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)
以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...
- CustomEditor 自定义预览窗
using UnityEngine; using System.Collections; public class MyTextureView : MonoBehaviour { public Tex ...
- Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失
通过查看数据可知,直辖市或者某些三级行政区域没有对应的二级区域,为方便后续的地址使用,可自定义缺失的二级地址. 如下示例自定义的二级行政区域的名称为一级区域的名称,对应的源码如下所示: 将此段源码添加 ...
- Java 自定义Excel数据排序
通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值.单元格颜色.字体颜色或图标等.在需要自定义排序情况下,我们也可以自行根据排序需要编辑数据排列顺序.本文,将通过 ...
- Unity Mono脚本 加密
加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源 ...
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...
- 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
[转]PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理 只要有人用了: select t.* from ...
随机推荐
- 什么是HBase?终于有人讲明白了
一.初识HBase HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文.HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeepe ...
- 轻量级多级菜单控制框架程序(C语言)
1.前言 作为嵌入式软件开发,可能经常会使用命令行或者显示屏等设备实现人机交互的功能,功能中通常情况都包含 UI 菜单设计:很多开发人员都会有自己的菜单框架模块,防止重复造轮子,网上有很多这种菜单框架 ...
- JAVA用for循环打印*三角形
public class Sanjiaoxing { //本节为for循环的嵌套结构练习 public static void main(String[] args) { // TODO Auto-g ...
- dubbo容错机制
dubbo的容错机制 Failover Cluster(默认) 失败自动切换,当出现失败,重试其它服务器.通常用于读操作,但重试会带来更长延迟. Failfast Cluster 快速失败,只发起一次 ...
- JS:Boolean
Boolean数据类型: 有两个值:true false Boolean会把不是Boolean的值变为Boolean值 var a = 1; var b = true; var c = 0; var ...
- 基恩士的浓淡补正算法(Shading Correction Filter)的模拟实现。
知道这个算法应该有很久了,主要当时在意2个事情,一个是这个名字的翻译是在是搞笑,第二是这个算法的效果.不过一直以来都十分好奇这个算法是怎么实现的.因为之前一直无法实际的用基恩士的软件平台用不同的图片去 ...
- 手把手教你实现在Monaco Editor中使用VSCode主题
背景 笔者开源了一个小项目code-run,类似codepen的一个工具,其中代码编辑器使用的是微软的Monaco Editor,这个库是直接从VSCode的源码中生成的,只不过是做了一点修改让它支持 ...
- NC15975 小C的记事本
NC15975 小C的记事本 题目 题目描述 小C最近学会了java小程序的开发,他很开心,于是想做一个简单的记事本程序练练手. 他希望他的记事本包含以下功能: 1.append(str),向记事本插 ...
- C语言求100以内的和的4种方式
C语言的一个很经典的例子,帮助熟练运行几个循环的写法 * 方法一(do---while语句) #include main () { int i,sum=0; do { sum=sum+i; i++; ...
- Optional 类
@Test public void test2(){ Girl girl = new Girl(); // girl = null; //ofNullable(T t):t可以为null Option ...