SerializeField

来源:互联网 发布:数据漏斗 excel 编辑:程序博客网 时间:2024/06/06 01:15

描述

强制统一序列化一个私有字段。

你几乎永远都不需要这个。当Unity序列化您的脚本时,它将只会序列化公有字段。如果除此之外,你还希望Unity序列化一个你的私有字段,你可以将SerializeField属性添加到该字段。

Unity将序列化所有脚本组件,重新加载新程序集,并从序列化的版本中重新创建脚本组件。这个序列化不会在.NET的序列化功能中完成,而是内置在Unity

所使用的序列化系统可以执行以下操作:

  • 能序列化公共非静态字段(可序列化类型)
  • 能可串行化标记为[SerializeField]属性的非公开非静态字段。
  • 无法序列化静态字段。
  • 不能序列化属性。

您的字段只有当unity可以序列化该种类型时才会被序列化:可序列化类型是:

  • 所有继承自UnityEngine.Object的类,例如GameObject,Component,MonoBehaviour,Texture2D,AnimationClip。
  • 所有基本数据类型,如int,string,float,bool。
  • 一些内置的类型,如Vector2,Vector3,Vector4,Quaternion,Matrix4x4,Color,Rect,LayerMask。
  • 可序列化类型的数组 - 可序列化类型的
    列表)
  • 枚举
  • 结构

注意:如果将一个元素放在列表(或数组)中两次,当列表被序列化时,您将获得该元素的两个副本一个副本在新列表中两次。

提示:Unity不会序列化Dictionary,但是您可以存储List的List <>和List <>的值,并在Awake()中的非序列化字典中进行缝合。这并不能解决您何时修改字典并将其“保存”回来的问题,但在许多其他情况下,这是一个很好的方法。

对于UnityScript用户:c#中的字段是UnityScript中的脚本变量,[SerializeField]变为@SerializeField。一个类上的[Serializable]在UnityScript中成为@script Serializable。

原创粉丝点击