siki老师,我接触到序列化和反序列化这个名词已经半年以上了,期间也查了些资料,但是因为平时用的不多,所以一直没有搞明白这两种行为到底是有什么用。什么叫序列化,什么叫反序列话。
我现在对这个的理解是:这个东西是和数据有关,序列化可以将数据添加入内存中,并且好像还可以直接进行一定程度的记忆。(例如:我制作了一个空的只有transform组件的预设体,之后在游戏运行中创建了这个预设体的实例,并且给它添加了一个脚本,这个脚本中有一个参数设置了序列化的特性。在运行过一遍之后,在Project面板检查这个预设体,就会发现这个预设体上被添加了上面那个脚本)
我看您的UI框架课程上面也用到了序列化和反序列话,请您能通俗的解释下这两个过程是做什么的吗?最好能举个简单点的类比例子。
还有就是通常都是什么情况下使用序列化和反序列化?因为我目前测试这个东西可以让private变量显示在检视体面板,不过经过初步测试,好像只能使简单型的变量显示在面板上(比如int或者string这种),复制点的class变量就不会显示了。虽然我看有人说是为了调节测试方便才这么做的,但是看您的UI框架课程里不是为了调试才使用的。
最后的问题就是我看到有人把SerializeField跟HideInInspector这两种特性一起使用。这个我看过说明但是还是一头雾水,因为说明里也充斥着序列化这个名词,所以我看着也有点懵。另外SerializeField这个特性是个序列化域的概念,这个域又指的是什么?希望老师能帮我解答下。谢谢。
序列化指的是 把一个内存中的对象转变成文件保存到本地, 这样就实现了持久化,即使电脑关机重启,这个对象已然存在于本地,可以随时读取,这就是序列化,序列化用来实现持久化
反序列化就是把上面提到的文件读取成一个对象, 这里的对象是存在于内存中, 当电脑关闭或者重启的时候,内存被清空里面的所有数据也不复存在,
HideInInspector 只是控制是否显示在Inspector面板上,跟保存与否没有关系
SerializeField 用来表示一个字段是序列化字段的,应该也就是你说的能保存
有的时候一个字段是private的,不想在外边通过程序修改,但是想通过inspector修改,所以会加上SerializeField
一般加了SerializeField就不回在加HideInInspector ,这样做没有任何意义