Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Класс Variant

О Godot Engine

Variant это самый важный тип данных в Godot, он самый важный класс в движке. Variant занимает 20 байт и может содержать практический любой тип данных внутри себя. Variant'ы редко используются для хранения информации на долгий срок, вместо этого они используются для коммуникации, редактирования, сериализации и передвижения данных.

Variant может:

  • Хранить почти любой тип данных

  • Выполнять операции между различными variants (GDScript использует Variant как атомарный/нативный тип данных).

  • Быть хешированным, так что можно он может быть легко сравнимым с другими variants

  • Использоваться для безопасной конвертации между типами данных

  • Использоваться для абстракции вызываемых методов и их аргументов (Godot экспортирует все эти функции через variants)

  • Использоваться для отложенных вызовов или передвижения данных между потоками.

  • Быть сереализован как бинарный файл и сохранён на диск, или передан через сеть.

  • Быть сериализован в текст и использоваться для печати значений и редактируемых настроек.

  • Работать как экспортируемое свойство, чтобы редактор мог редактировать его везде.

  • Использоваться для словарей, массивов, парсеров, итд.

По сути, благодаря классу Variant, разработка самого Godot была более простой задачей, так как он позволил с небольшими усилиями создавать сложные динамические конструкции, не типичные для C++. Подружитесь с Variant уже сегодня.

Источники:

Контейнеры: Dictionary и Array

Оба созданы с помощью variants. Словарь(Dictionary) может обрабатывать любой тип данных как ключ на любой тип данных. Массив(Array) просто содержит массив Variant'ов. Конечно, Variant может содержать в себе словарь или массив, делая их более гибкими.

Изменения контейнера будут модифицировать все ссылки на него. Mutex должен быть создан для его закрытия если требуется мульти-поточный доступ.

Поддержка Копии-на-запись (COW) для контейнеров была удалена в Godot 3.0.

Источники: