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 ...
随机推荐
- ZJOI2020
[ZJOI2015] 地震后的幻想乡 给定一个无向图 \(G\) ,\(n\) 个点 \(m\) 条边每条边权为 \([0,1]\) 的随机实数,求这张图的最小生成树的最大边权期望. \(1\le n ...
- Groovy基础语法
Groovy 基础语法 变量定义 1.支持动态类型,使用def关键字定义变量 // Java中定义变量的方式 int age = 18; String name = "张三"; / ...
- conda cheat sheet可直接百度这个名字
- Linux系列之安装JDK
卸载open jdk #查看jdk [root@localhost tools]# rpm -qa | grep jdk java-1.8.0-openjdk-headless-1.8.0.65-3. ...
- ExtJS 布局-Center布局(Center layout)
更新记录: 2022年6月12日 检查发布. 2022年6月1日 开始. 1.说明 center布局将子项放置在容器的中心. 2.设置布局方法 在父容器中设置 layout: 'center', // ...
- 论文阅读 Real-Time Streaming Graph Embedding Through Local Actions 11
9 Real-Time Streaming Graph Embedding Through Local Actions 11 link:https://scholar.google.com.sg/sc ...
- 论文阅读 Exploring Temporal Information for Dynamic Network Embedding
10 Exploring Temporal Information for Dynamic Network Embedding 5 link:https://scholar.google.com.sg ...
- UiPath视频教程
UiPath机器人企业框架简介https://www.bilibili.com/video/BV1SK411L7u9 UiPath借助第三方Pdf软件工作https://www.bilibili.co ...
- MYSQL的事务和索引
事务 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACID原则 ...
- 训练一个图像分类器demo in PyTorch【学习笔记】
[学习源]Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier 本文相当于 ...