unity序列化系统小结-来自unity手册(Script Serialization)

一、综述

在unity中,“东西”的序列化是unity一件很核心的事情,很多特性都是建立在序列化系统之上的:像检视面板、预制体(prefabs)、实例化(Instantiation)、保存场景、加载(loading)、编辑器代码的热重新加载(Hot
reloading of editor code)、unity自己的垃圾回收器(Resource.GarbageCollectSharedAssets())。序列化系统是用C++写成的,用于所有的内部物体类型(Textures, AnimationClip, Camera,
etc)。

二、需要序列化的域有何要求?

1、公有的,或者带有[SerializeField]属性的私有域

2、非静态的;

3、非常量的;

4、非只读的;

5、可以被实例化的其他域类型

三、能够实例化的域类型

1、自定义的非抽象类,且带有【Serializable】标记的属性

2、unity4.5及之后的自定义结构体,且带有【Serializable】标记的属性;

3、派生自UnityEngin.object的对象的引用。

4、基本数据类型

5、元素域类型是可以序列化的的数组

6、元素域类型是可以序列化的List<T>

四、需要注意的问题。

1、序列化系统对自定义类的null值支持不好。如果一个类的定义中有此类的一个字段,而此类又是被标记了【seriazable】属性的,那么该字段为null值时,序列化时将会new出一个实例出来,而new出的实例中又需要new出一个实例,这样便进入一个死循环,为了限制,unity最多支持7层。为了解决这个问题,可以将序列化此类转变成序列化一个结构体,该结构体保存了该类的主要成员。让需要序列化此类成员的类继承自ISErializationCallBackReceiver接口,并实现其两个方法。具体可参考unity手册,很好理解。

2、序列化系统对多态支持不好。如果有一个数组,比如是动物数组,其中存放了三个继承自动物类的子类的实例,如兔子、狗、猫,

那么实例化后数组中将保存的是三个动物的实例。

时间: 2024-07-30 01:43:44

unity序列化系统小结-来自unity手册(Script Serialization)的相关文章

全面理解 Unity UI 系统

[狗刨学习网] 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransform 继承于 Transform,所以 Transform 的所有特征 RectTransform 同样拥有.在 Transform 基础上,RectTransform 增加了 轴心(pivot).锚点(实际上是用 anchorMin.anchorMax 两个点定义的矩形区域).和 尺

【Unity编程】Unity动画系统(一)

Unity动画系统 Unity动画系统,也称为"Mecanim",提供了以下功能: 简单的工作流程,设置动画的所有元素,包括对象,角色和属性. 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段. 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画. 用于编辑动画状态的的简化工作流程,即动画控制器. 方便预览动画片段,以及片段之间的插值过渡. 这使得动画师可以独立

Unity 序列化 总结

查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.OnBeforeSerialize.html 和Unity 圣典 在这博友 的基础上 再总结下Unity 的序列化 序列化的作用是: 可以显示变量(类,结构等)在inspe

Unity 序列化

Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.OnBeforeSerialize.html 以下是上面2篇的摘要: 脚本的字段需要满足什么条件才能被序列化?(必须同时满足) 1. public 类型,或者有 [Serializ

unity序列化

什么是序列化 unity的序列化在unity的开发中起着举重足轻的地位,许多核心的功能都是基于序列化和反序列化来实现的.序列化简单来讲就是就是将我们所要保存的数据进行二进制存储,然后当我们需要的时候,在读取二进制文件,反序列化回来.下面是一些常用的序列化的例子: 存储脚本化的数据.在我们的c#代码中,可以将我们所要存储的数据进行序列化,进行存储 prefab与初始化.在unity开发过程中我们会制作很多的预制体(prefab),这些prefab都是序列化,以二进制的形式保存的.当你要对预制体进行

Unity脚本系统

什么是脚本?脚本是一个 MonoBehavior, 继承关系是 MonoBehavior -> Behavior -> Component -> Object GameObject 的行为是由附加到他们身上的组件控制的. 游戏事件 MonoBehavior 类名和脚本名必须要一样 public class MainPlayer : MonoBehaviour { public string myName; // Use this for initialization void Start

Unity 动画系统 Animation 和 Animator的小实例

本文结合一个很简单的动画demo,分别采用2种方法,来对比Animation和Animator的使用方式: 方法1:单独使用Animation 方法2:Animation结合Animator 动画Demo 两个动画.一个是移动,一个是缩放. 实现方式的对比 一.单独Animation来实现 空场景,找到一张Sprite图片,拖到面板中,右键添加Animation组件.如下: 点中这张pig猪的图片,点击Unity的 Window->Animation->Animation.出现如下: 这个时候

Unity for Windows: II – Publishing Unity games to Windows Store

原地址:http://digitalerr0r.wordpress.com/2013/08/27/unity-for-windows-ii-publishing-to-windows-8/ Windows 8 is a new OS with a Windows Store where you can distribute your apps to millions of users world wide, for both PC, laptops and tablets. You can se

细水长流话Hadoop(1)Hadoop序列化系统

声明:个人原创,转载请注明出处.文中引用了一些网上或书里的资料,如有不妥之处请告之. 本文是我阅读Hadoop 0.20.2第二遍时写的笔记,在阅读过程中碰到很多问题,最终通过各种途径解决了大部分.Hadoop整个系统设计精良,源码值得学习分布式的同学们阅读,以后会将所有笔记一一贴出,希望能方便大家阅读Hadoop源码,少走弯路. 1 序列化核心技术... 1 2 类型对象大小比较... 3 3 Writable类型工厂... 4 4 ObjectWritable类型... 5 5 其它序列化系