版本: Unity 6 (6000.0)
语言English
  • C#

SerializeField

UnityEngine 中的类

/

实现于:UnityEngine.CoreModule

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每项建议修改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议修改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

强制 Unity 序列化私有字段。

当 Unity 序列化您的脚本时,它只序列化公共字段。如果您也希望 Unity 序列化您的私有字段,可以将 SerializeField 属性添加到这些字段。

Unity 会序列化所有脚本组件,重新加载新的程序集,并从序列化版本重新创建您的脚本组件。此序列化使用 Unity 内部序列化系统完成;而不是使用 .NET 的序列化功能。

序列化系统可以执行以下操作

  • 可以序列化公共非静态字段(可序列化类型)
  • 可以序列化使用 SerializeField 属性标记的非公共非静态字段。
  • 无法序列化静态字段。
  • 无法序列化属性。

可序列化类型

Unity 可以序列化以下类型的字段

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

有关序列化的更多信息,请参阅 脚本序列化

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

注意:如果您想序列化自定义结构体字段,则必须为结构体提供 [System.Serializable] 属性。

提示:Unity 不会序列化 Dictionary,但是您可以为键存储一个 List<>,为值存储一个 List<>。请参阅 ISerializationCallbackReceiver 以获取示例。

其他资源:NonSerialized、SerializeReference、Serializable

using UnityEngine;

public class SomePerson : MonoBehaviour { //This field gets serialized because it is public. public string firstName = "John";

//This field does not get serialized because it is private. private int age = 40;

//This field gets serialized even though it is private //because it has the SerializeField attribute applied. [SerializeField] private bool hasHealthPotion = true;

void Start() { if (hasHealthPotion) Debug.Log("Person's first name: " + firstName + " Person's age: " + age); } }