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

Встроенная сериализация

Некоторые встроенные функции Unity автоматически используют сериализацию. Они описаны ниже.

Дополнительную информацию см. в документации по сериализации сценариев.

Сохранение и загрузка

Unity использует сериализацию для загрузки и сохранения сценСцена содержит среду и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
, АктивыЛюбые медиафайлы или данные, которые можно использовать в вашей игре или проекте. Ресурс может быть получен из файла, созданного вне Unity, например, из 3D-модели, аудиофайла или изображения. Вы также можете создавать некоторые типы ресурсов в Unity, например контроллер аниматора, аудиомикшер или текстуру рендеринга. Подробнее
См. в Словарь
и AssetBundles на жесткий диск вашего компьютера и обратно. Сюда входят данные, сохраненные в ваших собственных объектах API сценариев, таких как компоненты MonoBehaviour и ScriptableObjects.

Это происходит в режимах воспроизведения и редактирования редактора.

Окно инспектора

Когда вы просматриваете или изменяете значение поля компонента GameObject в окне инспектора, Unity сериализует эти данные, а затем отображает их в ИнспекторОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Подробнее
См. в окне Словарь
. Окно инспектора не взаимодействует с Unity Scripting API, когда оно отображает значения поля. Если вы используете свойства в своем скрипте, ни один из методов получения и установки свойств никогда не вызывается при просмотре или изменении значений в окнах инспектора, поскольку Unity сериализует поля окна инспектора напрямую.

Перезагрузка скриптов в редакторе Unity

Когда вы изменяете и сохраняете сценарий, Unity перезагружает все загруженные в данный момент данные сценария. Сначала он сохраняет все сериализуемые переменные во всех загруженных скриптах. Фрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменяйте свойства компонента с течением времени и реагируйте на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь
, и после загрузки скриптов восстанавливает их. Все данные, которые нельзя сериализовать, теряются после перезагрузки скрипта.

Это влияет на все окна редактора, а также на все MonoBehaviours в проекте. В отличие от других случаев сериализации в Unity, закрытые поля сериализуются по умолчанию при перезагрузке, даже если у них нет атрибута «SerializeField».

Сборные элементы

В контексте сериализации префабтип ресурса, который позволяет для хранения GameObject с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
См. в Словарь
 — это сериализованные данные одного или нескольких GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
и компонентыФункциональная часть GameObject. GameObject может содержать любое количество компонентов. В Unity есть много встроенных компонентов, и вы можете создавать свои собственные, написав сценарии, которые наследуются от MonoBehaviour. Подробнее
См. в Словарь
. Экземпляр Prefab содержит ссылку как на источник Prefab, так и на список его модификаций. Модификации — это то, что Unity нужно сделать с исходным кодом Prefab, чтобы создать конкретный экземпляр Prefab.

Экземпляр Prefab существует только тогда, когда вы редактируете свой проект в редакторе Unity. Во время сборки проекта редактор Unity создает экземпляр GameObject из двух наборов данных сериализации: исходного файла Prefab и модификаций экземпляра Prefab.

Экземпляр

Когда вы вызываете Instantiate для всего, что существует в Scene, например Prefab или GameObjects, Unity сериализует их. Это происходит как во время выполнения, так и в редакторе. Все, что происходит от UnityEngine.Object, может быть сериализовано.

Затем Unity создает новый игровой объект и десериализует данные в новый игровой объект. Затем Unity запускает тот же код сериализации в другом варианте, чтобы сообщить, на какие другие UnityEngine.Objects ссылаются. Он проверяет все указанные UnityEngine.Objects, чтобы определить, являются ли они частью данных, которые создаются. Если ссылка указывает на что-то «внешнее», например на текстуру, Unity сохраняет эту ссылку как есть. Если ссылка указывает на что-то «внутреннее», например на дочерний GameObject, Unity исправляет ссылку на соответствующую копию.

Выгрузка неиспользуемых ресурсов

Resource.GarbageCollectSharedAssets() — это встроенный сборщик мусора Unity, который выполняет функции, отличные от функций стандартного сборщика мусора C#. Он запускается после загрузки сцены и проверяет объекты (например, текстуры), на которые больше нет ссылок, и безопасно их выгружает. Собственный сборщик мусора Unity запускает сериализатор в варианте, в котором объекты сообщают обо всех ссылках на внешние UnityEngine.Objects. Вот как текстуры, которые использовались одной сценой, выгружаются в следующей.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3