Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)

栏目: 编程语言 · 发布时间: 7年前

内容简介:Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)

[System.Serializable]对象放在数组中,默认在Inspector面板上Array的数量是0,如果在这里修改数量,新加的元素在Inspector面板上它是没有默认值的。

比如:我有一个很轻量级的控件,代码中需要序列化List数据,没必要在写个类OnInspectorGUI中自定义绘制它。使用者会在Inspector面板中决定序列化的数量,可是使用者并不知道要填写什么样的值进去, 如果int都是默认值是0 bool默认值是false 可能下面就会有问题。

再具体举个例子,比如我需要序列化一个模型的缩放scale系数,int 的默认值是0。使用者第一个添加了元素(他并不知道这里需要填1)放到游戏里模型就不显示了,因为scale是0  坑吧~

今天我无意间发现一个方法也算半完美解决了这个问题。如下代码所示,声明Array或者List的时候强制设置添加一个元素进去。(代码很简洁)

usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
 
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 Data1subData;
}
 
[System.Serializable]
public class Data1
{
 public int  c = 300;
 public bool d = false;
}

如下图所示,当把脚本挂在gameObject上的时候,第一个元素对象就自动加上了默认值。

Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)

如下代码所示,如果按照老的方式来做,不去默认添加一个新元素。

public class Test : MonoBehaviour 
{
 public Data[] data1;
 public List<Data> data2;
}

如下图所示,修改了List数量后[System.Serializable] 在Inspector面板上就不会出现默认值了。。

Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)

最后,上面我说过这个方法只是半完美。原因就是在Inspector面板上修改Array的数量的时候,Unity会自动把元素的值copy给新的元素。所以说如果数量变化,新的元素的默认值会是上一个元素的值。(我觉得这也不影响,因为使用者更关心第一次输入的默认值是否正确)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

另一个地球

另一个地球

[美]马克·格雷厄姆、威廉·H·达顿 / 胡泳、徐嫩羽 / 电子工业出版社 / 2015-10-1 / 78

互联网在日常工作和生活中扮演日益重要的角色,互联网将如何重塑社会?本书通过汇集有关互联网文化、经济、政治角色等问题的研究成果,提供了特定社会制度背景下解决这一问题的根本办法。 关于互联网的研究是蓬勃发展的崭新领域,牛津大学互联网研究院(OII)作为创新型的跨学科学院,自成立起就专注于互联网研究。牛津大学互联网研究院关于互联网+社会的系列讲座在一定程度上塑造了互联网+社会。本书内容基于不同学科......一起来看看 《另一个地球》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具