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 ...
随机推荐
- (十二).NET6 + React :升级!升级!还是***升级!!!+ IdentityServer4实战
一.前言 此篇内容较多,我是一步一个脚印(坑),以至于写了好久,主要是这几部分:后台升级 .NET6 VS2022.前台升级Ant Design Pro V5 .前后台联调 IdentityServ ...
- BI 如何让SaaS产品具有 “安全感”和“敏锐感”(上)
SaaS模式一经推出,凭借自身的高性价比.低维护成本,无需软硬件维护.无需运维等明晃晃的优点,得到了爆发式的增长,甚至全面改变了软件的开发模式.各位老总的问候语,不知从什么时候开始,都变成了:&quo ...
- CSS(九):background(背景属性)
通过CSS背景属性,可以给页面元素添加背景样式. 背景属性可以设置背景颜色.背景图片.背景平铺.背景图像固定等. background-color(背景颜色) background-color属性定义 ...
- Spring Boot 实践 :Spring Boot + MyBatis
Spring Boot 实践系列,Spring Boot + MyBatis . 目的 将 MyBatis 与 Spring Boot 应用程序一起使用来访问数据库. 本次使用的Library spr ...
- NCF 的Azure Cosmos DB 演示案例
简介 NCF想必看过我之前发的NCF的文章的同学们都已经很熟悉了 今天我们要来聊一聊的是NCF遇到Azure Cosmos DB后会碰撞出什么样的火花,让我们一起往下看 我们先来说说什么是Azure ...
- JS:条件语句3
1.while while 语句只要指定条件为 true,就会执行循环. 语法: while(条件){ 语句: } 例: var i = 0; while (i < 5) { console.l ...
- 雪花算法及微服务集群唯一ID解决方案
雪花算法(SnowFlake) 简介 现在的服务基本是分布式.微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 ...
- UiPath文本操作Set Text的介绍和使用
一.Set Text的介绍 向输入框/文本框写入文本的一种操作 二.Set Text在UiPath中的使用 1.打开设计器,在设计库中新建一个Sequence,为序列命名及设置Sequence存放的路 ...
- 用python整个URL缩短器
URL缩短 短网址由于易于记忆和输入,因此在数字营销领域非常受欢迎. 这里给大家介绍一下,如何使用Python创建URL缩短器. python答疑 咨询 学习交流群2:660193417### fro ...
- NC200211 装备合成
NC200211 装备合成 题目 题目描述 牛牛有 \({x}\) 件材料 \({a}\) 和 \({y}\) 件材料 \({b}\) ,用 \({2}\) 件材料 \({a}\) 和 \({3}\) ...