Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)
来源:互联网 发布:asp手机考试系统源码 编辑:程序博客网 时间:2024/06/05 21:51
本文固定链接: http://www.xuanyusong.com/archives/4371
雨松MOMO 2017年04月19日 于 雨松MOMO程序研究院 发表
[System.Serializable]对象放在数组中,默认在Inspector面板上Array的数量是0,如果在这里修改数量,新加的元素在Inspector面板上它是没有默认值的。
比如:我有一个很轻量级的控件,代码中需要序列化List数据,没必要在写个类OnInspectorGUI中自定义绘制它。使用者会在Inspector面板中决定序列化的数量,可是使用者并不知道要填写什么样的值进去, 如果int都是默认值是0 bool默认值是false 可能下面就会有问题。
再具体举个例子,比如我需要序列化一个模型的缩放scale系数,int 的默认值是0。使用者第一个添加了元素(他并不知道这里需要填1)放到游戏里模型就不显示了,因为scale是0 坑吧~
今天我无意间发现一个方法也算半完美解决了这个问题。如下代码所示,声明Array或者List的时候强制设置添加一个元素进去。(代码很简洁)
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test : MonoBehaviour { public Data[] data1= new Data[1]; public List<Data> data2 = new List<Data> (){ new Data () };}[System.Serializable]public class Data{ public int a =500; public bool b = true; public Data1 subData;}[System.Serializable]public class Data1{ public int c = 300; public bool d = false;}
如下图所示,当把脚本挂在gameObject上的时候,第一个元素对象就自动加上了默认值。
如下代码所示,如果按照老的方式来做,不去默认添加一个新元素。
public class Test : MonoBehaviour { public Data[] data1; public List<Data> data2;}
如下图所示,修改了List数量后[System.Serializable] 在Inspector面板上就不会出现默认值了。。
最后,上面我说过这个方法只是半完美。原因就是在Inspector面板上修改Array的数量的时候,Unity会自动把元素的值copy给新的元素。所以说如果数量变化,新的元素的默认值会是上一个元素的值。(我觉得这也不影响,因为使用者更关心第一次输入的默认值是否正确)
转by:蒋志杰
- Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)
- 编辑器之[System.Serializable]数组List对象添加默认值
- Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
- Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
- 【基础】Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
- Unity3D研究院之IOS Android支持中文与本地文件的读取写入(二十七)
- Unity3D研究院之IOS Android支持中文与本地文件的读取写入(二十七)
- Unity3D研究院编辑器之创建Lua脚本模板(十六)
- Unity3D研究院之在开始学习拓展编辑器(一)
- Unity3D研究院编辑器之创建旧版动画
- Unity3D研究院之IOS实现平面多点触摸(二)
- [Unity3D]编辑器扩展之数组或List显示
- Objective-C研究院之数组对象(七)
- Objective-C研究院之数组对象(七)
- (外网链接内容)Unity3D研究院编辑器之5.3JSON的序列化
- Unity3D研究院之在开始学习拓展编辑器
- Unity3D研究院之使用Animation编辑器编辑动画
- Unity3D研究院之使用Animation编辑器编辑动画
- java总结
- Spring--1.Spring容器
- 智能指针
- bzoj1115: [POI2009]石子游戏Kam
- 特长生模拟 DNA排序(逆序对+快排)
- Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)
- Activity 启动模式全解析
- caffe深度网络优化过程中loss=nan
- 剑指offer第三题至第九题(java详解)
- 设计模式之策略模式
- Android Dalvik虚拟机初识
- Tensorflow学习笔记--MNIST LSTM分类器代码
- Unity知识图谱
- Java反射机制(1)