[UnityAPI]SerializedObject类 & SerializedProperty类

时间:2022-04-20 23:05:19

以Image类为例

1.MyImage.cs

 using UnityEngine;
using UnityEngine.UI; public class MyImage : Image { private int a = ;
protected float b = 2f;
public string c = "";
public int D { get; set; } protected override void OnPopulateMesh(VertexHelper toFill)
{
base.OnPopulateMesh(toFill); Debug.Log(a);
Debug.Log(b);
Debug.Log(c);
Debug.Log(D);
}
}

MyImage继承自Image,但是如果把MyImage挂上去,会发现面板上没有出现自定义的属性,这是为什么呢?通过看UGUI的源码,可以发现有一个ImageEditor类,这个类负责绘制Image的属性面板,同时还存在这样一句:[CustomEditor(typeof(Image), true)],表示所有继承自Image的子类都使用和Image一样的属性面板。

[UnityAPI]SerializedObject类 & SerializedProperty类

[UnityAPI]SerializedObject类 & SerializedProperty类

[UnityAPI]SerializedObject类 & SerializedProperty类

[UnityAPI]SerializedObject类 & SerializedProperty类

2.MyImageEditor.cs

那么,如果想让Image的子类显示出自定义的属性,该怎么办呢?很简单,写一个类去继承ImageEditor,然后去绘制自定义的属性即可。参考ImageEditor的源码可以得出如下代码。serializedObject为被序列化的对象,SerializedProperty为该对象上被序列化的字段。经测试,private和protected的字段要加上[SerializeField]才能被序列化,public的字段无需处理,而属性是不能被serializedObject.FindProperty(会报空)

 using UnityEditor.UI;
using UnityEditor; [CustomEditor(typeof(MyImage))]
[CanEditMultipleObjects]
public class MyImageEditor : ImageEditor { SerializedProperty a;
SerializedProperty b;
SerializedProperty c;
SerializedProperty D; protected override void OnEnable()
{
base.OnEnable(); a = serializedObject.FindProperty("a");
b = serializedObject.FindProperty("b");
c = serializedObject.FindProperty("c");
D = serializedObject.FindProperty("D");
} public override void OnInspectorGUI()
{
base.OnInspectorGUI(); serializedObject.Update(); EditorGUILayout.PropertyField(a);
EditorGUILayout.PropertyField(b);
EditorGUILayout.PropertyField(c);
//EditorGUILayout.PropertyField(D); serializedObject.ApplyModifiedProperties();
}
}

[UnityAPI]SerializedObject类 & SerializedProperty类

效果如下:

[UnityAPI]SerializedObject类 & SerializedProperty类

[UnityAPI]SerializedObject类 & SerializedProperty类的更多相关文章

  1. 初识UML类图--类之间关系

    前言 最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这 ...

  2. [.net 面向对象编程基础] (9) 类和类的实例

    [.net 面向对象编程基础] (9) 类和类的实例 类 ,顾名思义就是分类.类别的意思.我们要面向对象编程,就需要对不同的事物进行分类.类可以说是.net面向对象的核心. 类:就是具有相同的属性和功 ...

  3. java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),

    建立exception包,建立Bank类,类中有变量double  balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount ...

  4. 19 BasicTaskScheduler0 基本任务调度类基类(一)——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  5. 日期操作类--GregorianCalendar类

    GregorianCalendar--API JavaTM Platform Standard Ed. 6 GregorianCalendar类 Calendar类实现了公历日历,GregorianC ...

  6. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

  7. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;

    ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口:       2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...

  8. Java API —— Set接口 & HashSet类 & LinkedHashSet类

    1.Set接口     1)Set接口概述         一个不包含重复元素的 collection,无序(存储顺序和取出顺序不一致),唯一.  (List有序,即存储顺序和取出顺序一致,可重复) ...

  9. <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

    设计类

随机推荐

  1. Mac AppleScript 自动完成按键

    本人用AppleScript成功实现了打开锐捷app,并且在用户验证框输入我的用户密码,然后强制退出锐捷.(至于为什么这么做呢?用校园网的痛苦,一言难尽啊!) 学习以下内容,首先你要自行百度资料来学习 ...

  2. 关于xfce中桌面没法显示回收站以及thunar中无法进行卷管理的解决办法

    出现这种问题的原因应该不是当前用户没在storage这个组里,因为我试过将用户从storage组里移除并不对影响桌面上回收站的显示. 问题的原因是没有安装gvfs这个软件,装上之后,重新登录当前用户, ...

  3. TortoiseSVN 版本回滚

    尝试用TortoiseSVN进行版本回滚,回滚到的版本和实际的内容有出入,可能是点了太多次给点乱了,囧~ 不过发现一个比较靠谱的方法,如下: 右键点击文件TortoiseSVN->showlog ...

  4. Using Amazon API Gateway with microservices deployed on Amazon ECS

    One convenient way to run microservices is to deploy them as Docker containers. Docker containers ar ...

  5. Codeforces Round #379 (Div. 2) C. Anton and Making Potions 二分

    C. Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input ...

  6. php使用openssl进行Rsa长数据加密,解密保存问题

    原来代码: public function encrypt($data) { if (openssl_public_encrypt(base64_encode($data), $encrypted, ...

  7. mongoDB7--游标cursor

    之前我们学习了"增删改查"四中语法和查询表达式的深入学习,我们已经掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作的效率问题了.(1)游标介绍如果我们查询 ...

  8. Beta冲刺第三天

    一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:修改权限相关的资源表示,修复flex布局排版高度问题,修复文件更新问题,去除登录页面的默认账号密码,服务器部署. 2.黄腾达:修复日程首次执行时间 ...

  9. 查找轮廓(cv2.findCountours函数)

    1.输入为二值图像,黑色为背景,白色为目标 2.该函数会修改原图像,因此若想保留原图像在,则需拷贝一份,在拷贝图里修改. 一.查找轮廓 cv2.findContours() 三个输入参数:输入图像(二 ...

  10. C.字符串(字符)操作

    1.memchr 检测的是一段内存,strchr 检测的是一个字符串 如果一段内存中有0x0的话,显然不能用strchr去查找的.建议看看两个函数的原型 strchr会停在 '\0',memchr不会 ...