Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

SerializeField

класс в UnityEngine / Реализовано в: UnityEngine.CoreModule

Описание

Заставить 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<> для значений и сшить их в несериализованном словаре на Awake() . Это не решает проблему, когда вы хотите изменить словарь и «сохранить» его обратно, но это удобный трюк во многих других случаях.

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); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3