Serialize功能
Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系。

简单的说,在没有自定义Inspector的情况下所有显示在Inspector 中的属性都同时具有Serialize功能。

换句话说,就是你在Inspector看到什么,保存游戏的时候,这些值就会被保存成二进制文件。

本文说说可被Serialize的变量的定义方法

1. public 变量
在没有加入任何Attribute的前提下,public变量是默认被视为可以被Serialize的。所以public声明的变量在Inspector面板中是可见的。
public int MaxExp;

2. [SerializeField] Attribute
强制unity去序列化一个私有域

这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,这个时候可以使用[SerializeField]这个Attribute:

[SerializeField]
protected int foobar = 0;
注意: 这样定义出的成员变量也是会在Inspector中显示出来。

在Unity最新的UI系统中,UI属性上方全部添加[SerializeField] ,如下所示

[SerializeField]
private int ID;

3. 单独的class或struct
Serializable是.Net自带的序列化

有时候我们会自定义一些单独的class/struct, 由于这些类并没有从 MonoBehavior 派生所以默认并不被Unity3D识别为可以Serialize的结构。自然也就不会在Inspector中显示。我们可以通过添加 [System.Serializable]这个Attribute使Unity3D检测并注册这些类为可Serialize的类型。具体做法如下:

[System.Serializable]
public class FooBar {
public int foo = 5;
public int bar = 10;
}
注意:Serializable只可以对class,struct,enum,delegate进行序列化,不可以对属性序列化

4. ScriptableObject
ScriptableObject 类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便,具体请参考 [cb]ScriptableObject 序列化

NonSerialize的变量的定义方法

4.1. protected, private, internal 变量
默认情况下,protected, private, internal变量将不会被serialize.

4.2. [System.NonSerialized] Attribute
有时候我们需要定义一些public变量方便操作,但是又不希望这些变量保留。这个时候可以利用[System.NonSerialized]来完成这个操作:

[System.NonSerialized] public float foobar = 1.0f;

4.3. readonly, const, static 修饰符
如果变量加入了readonly, const, static等修饰符,无论他的serialize设置如何,都将不会进行serialize

4.4. Dictionary

关于Dictionary在Inspector面板的显示一直是个难题,这里推荐大家用一款插件来解决

Odin - Inspector and Serializer 2 游戏序列化插件

只需要脚本从继承MonoBehaviour改为 SerializedMonoBehaviour 即可,

显示效果非常的完美

最新文章

  1. win8.1系统的安装方法详细图解教程
  2. JAVA垃圾收集机制剖析
  3. jQuery的eq方法
  4. Uva 11395 Sigma Function (因子和)
  5. atitit. 浏览器插件 控件 applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o
  6. JS对日期时间的操作
  7. 华为OJ平台——统计字符串中的大写字母
  8. 转: sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
  9. Xcode7设置生成DSYM出现大量警告
  10. hdu 1042
  11. MySQL与逻辑模块
  12. 开放Nginx在文件夹列表功能
  13. 关于查看文件size
  14. C# CookieHelper
  15. Anton and Making Potions
  16. Netty学习笔记
  17. 将一个整数M分成N个整数 要求每个都在区间【minV, maxV】之间
  18. ios和android适配问题总结
  19. C++二分图匹配基础:zoj1002 FireNet 火力网
  20. fastclick.js插件使用简单说明

热门文章

  1. Discuz!数据库操作DB类和C::t类介绍
  2. html()方法与append()方法
  3. IDEA中导入Maven模块
  4. 绘图 Matplotlib Numpy Pandas
  5. mysql_safe和mysql_multi
  6. postscript打印机语言
  7. 三大框架整合模板ssh
  8. 《Flask Web开发实战:入门、进阶与原理解析》 学习笔记
  9. fastjson ping外带信息poc
  10. docker 构建自己的image 镜像文件