1.Script Serialization

序列化是unity中把数据结构或者是对象状态转换成unity可以存储的格式的一个自动化过程,一些unity内置的特性就是使用序列化,比如保存和加载,属性面板,实例化,以及prefab

你在untiy中如何声明你的变量,影响着unity怎么序列化它,同时也对性能有一定的影响

2.什么是热重载

热重载是在编辑器下创建修改脚本,能够立马生效的过程,不需要重新打开VS或者unity

当你更改脚本变量并保存时,Unity会先存储所有序列化变量,然后再把它们从硬盘上加载出来,赋值给之前序列化的变量,这样就完成了值的更新,那些不能序列化的变量数据就丢失了,因为赋值的是空值

3.保存和加载

Unity 使用序列化从硬盘上加载 Scenes, Assets,  AssetBundles t. 这也包括你在脚本中保存的变量数据,比如MonoBehaviour 组件和 ScriptableObjects.

4.属性面板

当你在属性面板上查看或者更改游戏物体的属性值时,unity是先序列化该数据,然后再把它显示出来,属性面板上更改了之后,直接序列化数据,覆盖原来的值,和脚本没有任何关系,也就是即使脚本中该变量有get set属性,也不会执行,这也就是在脚本中定义了变量值,在属性面板上给改了之后,使用的是面板上的值,因为面板是后序列化的。

5.序列化规则

unity中的序列化实时运行的,所以对性能是有影响的,下面是一些序列化的条件:

  • public, 或者是private但是有 SerializeField 属性的可以序列化
  • static、const、readonly的可以被序列化
  • 在编辑器下私有字段是默认被序列化的

简单字段类型可以被序列化:

  • 自定义的非泛型,非抽象的类,且有Serializable 属性可以被序列化
  • 自定义的结构体 structs,带有Serializable 属性可以被序列化
  • 引用继承自 UnityEngine.Object的对象可以被序列化
  • 基本数据类型 (int, float, double, bool, string, etc.)
  • Enum types
  • 下面unity内置的类型可以被序列化: Vector2, Vector3, Vector4, Rect, Quaternion, Matrix4x4, Color, Color32, LayerMask, AnimationCurve, Gradient, RectOffset, GUIStyle
  • 对于私有字段,在加载脚本的时候是序列化的,被载入了值,在外部是不能够对其序列化的,要想在外部对其序列化,要加上serializationField属性

含有上面类型的数组和列表可以被序列化,字典不可以被序列化

Note: Unity不支持多级序列化,比如 (多维数组,交叉数组,嵌套类型).如果你想序列化这些,有两种方法,一个是把嵌套类型封装到类或者结构体内,第二个是实现ISerializationCallbackReceiver 的回调函数,后面有介绍

下面是一个类是不是可以序列化的标志:

  • 有Serializable 属性
  • 非静态,抽象,泛型

6.序列化的技巧

  • 声明你的变量,目的是让Unity序列化尽可能小的数据集。这样做的主要目的不是为了节省计算机硬盘上的空间,而是确保您可以与项目的前一个版本保持向后兼容。如果您使用大量的序列化数据集,那么在开发的后期,向后兼容性会变得更加困难.

  • 不要序列化重复的数据或缓存的数据。这对向后兼容性造成了重大问题:它有很高的出错风险,因为数据太容易失去同步.

  • independent of the data and only dependent on what is exposed in the script. The only way to reference other objects is through classes derived from UnityEngine.Object. These classes are completely separate; they only reference each other and they don’t embed the contents.

.

Unity Serialization 序列化相关推荐

  1. 畅游C++ Boost Serialization 序列化

    原文链接:https://blog.csdn.net/qq2399431200/article/details/45621921 目录 1.工作环境 2.使用方法 3.工程下载 4.总结 5.参考文献 ...

  2. C++使用boost.serialization序列化与反序列化

    我们不再介绍如何安装boost环境,默认已经安装好了 侵入式序列化 #include <fstream> #include <iostream> #include <bo ...

  3. Unity json 序列化 和 反序列化

    _Afra 的博客_会思考的猴子_CSDN博客-unity,Arduino,Processing领域博主 using UniRx; using UnityEngine;namespace QFrame ...

  4. Unity—JsonFx序列化场景

    场景数据类: /// <summary> /// 关卡数据 /// </summary> public class LevelData {     //关卡名称     pub ...

  5. 在Unity中创建基于Node节点的编辑器 (二) 窗口序列化

    孙广东  2018.5.13 csdn 的产品 , 真垃圾, 不想吐槽了, 文章保存就丢!     没办法  .    怎么不满意, 还是得继续用, 哎~~~ 第二部分 在Unity中序列化基于节点的 ...

  6. 递归序列化错误:Recursive Serialization is not supported. You can‘t dereference a PPtr while loading.

    递归!序列化!错误!这个bug不简单,看着就感觉很牛皮. 报错信息:Recursive Serialization is not supported. You can't dereference a ...

  7. 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

    From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列 ...

  8. Unity | 序列化(Serialized)和反序列化(NonSerialized)是什么意思

    一.什么是序列化 官方叙述:序列化是将对象的状态信息转换为可以存储或传输的形式的过程. 人话叙述:我们平时输入的代码,实际上是不能储存或者传输的,所以我们需要翻译一下,翻译成能储存或者翻译的文字,这个 ...

  9. Unity对象和序列化原理介绍

    Unity使用了很多年了,在这里我敢说很多人对Unity对象和序列化原理并不是很清楚,比如Asset与Object之间有啥区别?如何管理Asset?Unity的序列化是咋回事等等,还有在项目中遇到资源 ...

  10. 深入理解Unity的prefab和序列化过程

    遇到一个好帖子,所以记下来: https://connect.unity.com/p/unityeditorzhi-tong-guo-serializedobjectlei-shi-xian-pi-l ...

最新文章

  1. Virtualbox安装使用注意
  2. 以太网未识别的网络win10_工业以太网典型应用、常见故障、冗余网络技术及实例...
  3. BZOJ 1008--[HNOI2008]越狱(容斥快速幂)
  4. git添加user及repository
  5. 计算面平均边_计算机图形学补充2:齐次空间裁剪(Homogeneous Space Clipping)
  6. 《javaScript100例|02》超级经典一套鼠标控制左右滚动图片带自动翻滚
  7. java tcp发消息给硬件_服务器可以使用TCP向客户端发送消息吗?
  8. 避免Unity变量初始化错误的8条建议
  9. Oracle集群(RAC)及 jdbc 连接双机数据库
  10. 163网站顶部展出的大幅广告
  11. win7下對顯示器的電源的操作
  12. c语言程序设计2020年版,2020年新版c语言程序设计题库.docx
  13. python网易云歌词爬虫_用python爬取网易云音乐歌曲的歌词
  14. RecycleView的 Scrapped or attached views may not be recycled错误原因研究
  15. Data too long for column解决方法
  16. 南开大学推出中国首家元宇宙新闻与传播学院
  17. SDWAN组网与传统组网方式的对比
  18. android 高光动画,InstrumentPanelView
  19. 开发人员的windows工具箱
  20. 域服务器用户一直被锁,Windows Server 2019 域用户账户锁定策略

热门文章

  1. robots.txt文件信息泄漏
  2. wireshark怎么抓包和详细图文教程
  3. IT服务外包的必要性
  4. 耳穴减肥自身感受细节描述0422
  5. Phyton安装MySQL驱动
  6. ps去水印(操作流程)
  7. 微信小助手 for mac(WeChatPlugin)使用攻略
  8. 海关179号出口清单报文CEB603Message描述规范
  9. Prometheus的函数和计算公式
  10. 你还在用 format 格式化字符串?