首页 > Unity3D频道 > 【Unity3D拓展编辑器】 > Unity3D研究院编辑器之[System.Serializable]数组List对象添加默认值(二十七)
2017
04-19

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的时候强制设置添加一个元素进去。(代码很简洁)

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

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

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

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

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

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

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

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

  1. smartgrass 说:

    unity的坑,没法用默认值,太可恶了

  2. flyer 说:

    请教一下,如果想将list在面板中的element0、element1..显示改为显示每项的某些具体信息,该怎么做?

  3. 黄尚 说:

    那如若是动态的Gameobject[] data 去给默认值,怎么写呢?

留下一个回复

你的email不会被公开。