-
Creator 版本:2.2.1
-
编辑器操作系统 :Win10
-
出现概率:100%
在代码里定义一个私有变量_p,挂到一个预置物上,保存预置物后, _p的初始值会被保存到prefab里,然后手动更改这个变量的值,运行发现, _p的值不会发生改变,永远为第一次保存时的值。
- 将脚本里 _p的值改为-10,然后挂到预置物上,保存预置物,会发现这个-10被记录到资源了。
- 再更改_p的值,发现无论改成什么, _p一直为-10
Creator 版本:2.2.1
编辑器操作系统 :Win10
出现概率:100%
在代码里定义一个私有变量_p,挂到一个预置物上,保存预置物后, _p的初始值会被保存到prefab里,然后手动更改这个变量的值,运行发现, _p的值不会发生改变,永远为第一次保存时的值。
额,好像是我理解错了,所有变量默认都是会被序列化的,设定属性 serializable 为false就没问题了。
不过,一个默认不显示在编辑器面板上的变量是不是也应该默认不序列化呢,一个没法在编辑器面板上更改值的参数,还序列化为初始值,不符合使用习惯,也容易造成bug
并不一定喔,有些属性需要在设置的时候做一些额外操作,这样经常就会把它们实现为get/set属性
但get/set属性是不能序列化的,所以这些属性的数据就得存到另一个属性里。
但因为这些实际存数据的属性是希望给get/set属性用的,所以不希望它们可以被直接用,所以需要把他们设为私有
由于这些属性是用来提get/set属性存数据的,所以他们应该能被序列化,但依前所述,它们需要被隐藏起来。
这其实是私有属性的 最常用 的应用场景
当你觉得一个东西不应该被序列化的时候,还应该再追问一句,它算是一个属性么?Creator中属性这一概念用来支持两种应用:其一是编辑器直接操作支持(以及更进一步的动画时间线操作支持),其二是序列化支持。如果这两者你都不需要,那么就别把它作为属性声明到properties定义中,而应该在类的ctor构造函数里为它们直接赋予初始值。