Unity 序列化类型总结

主要内容

介绍unity常用的与序列化相关的属性,总结一下unity的序列化系统

一、SerializeField

unity在序列化脚本时,它只会序列化公有字段,如果想要序列化私有字段,就需要为该字段添加SerializeField特性,该特性用于强制序列化私有字段;

序列化的目的是为了进行本地存储,unity将会序列化所有的脚本化组件然后从序列化版本中重新创建脚本组件;unity的序列化不是.NET的序列化,而是unity自己内置的序列化系统;

应用规则:

  • 可以序列化公有的非静态类型
  • 可以序列化非公有非静态的但是标记了SerializeField特性的字段
  • 不可以序列化static字段
  • 不可以序列化属性

根据以上应用规则,在unity可以进行序列化的类型如下:

  • 所有从UnityEngine.Object继承的类
  • 所有的基础类型,包括字符串
  • 一些内置类型,如Vector2,Vector3,Color等
  • 由可序列化类型组成的Array和List
  • 结构体和枚举类型

注意:unity中Dictionary类型不可以序列化,但是unity手册内给出了替代方案:可以使用List分别存储key值和value值,然后在Awake()中组成Dictionary类型

二、HideInInspector

将字段在属性面板中隐藏,但是序列化该字段;无论公有字段还是私有字段,都会进行序列化但是隐藏不显示在属性面板中;

三、C#中的NonSerializable与System.Serializble

使用C#的序列化系统完成序列化的一些操作;

四、扩展-Unity Inspector Window的Debug和Normal模式

在属性面板的显示中,默认显示为Normal模式,也可以切换到Debug模式;

  • Normal模式,属性面板显示的是一个资源或者组件的自定义编辑器,Inspector的属性编辑窗口是默认窗口(只显示公有字段),而如果为脚本写了CustomEditor,那么Custom Editor里定义了什么控件就会显示什么,而与属性的公有和私有无关;
  • Debug模式,显示公有字段和私有字段(私有字段是只读的),注意,如果一个字段设置了HideInspector或者NonSerializable,那么它将不会显示在Inspector的Debug模式中;

五、参考资料

SerializeField - Unity Manual

C#中的序列化和反序列化

脚本序列化-Unity Manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值