【转】 [System.Serializable]数组List对象添加默认值

[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给新的元素。所以说如果数量变化,新的元素的默认值会是上一个元素的值。(我觉得这也不影响,因为使用者更关心第一次输入的默认值是否正确)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,324评论 19 139
  • 数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示Java中的数组形式 T[]。 v...
    时待吾阅读 4,571评论 0 0
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,737评论 3 93
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,222评论 1 118
  • 五一 三天去了珠海 澳门 广州,快累死了,行程超级赶,算下来3天就睡了15小时吧。 这是我工作以来第一次出省!!没...
    睿子_bb46阅读 1,898评论 2 1