PackedScene
Наследует: Resource < RefCounted < Object
Абстракция сериализованной сцены.
Описание
Упрощенный интерфейс к файлу сцены. Предоставляет доступ к операциям и проверкам, которые могут быть выполнены над самим ресурсом сцены.
Может использоваться для сохранения узла в файл. При сохранении узел, а также все узлы, которыми он владеет, сохраняются (см. свойство Node.owner).
Примечание: Узел не обязательно должен владеть собой.
Пример: Загрузка сохраненной сцены:
# Используйте load() вместо preload(), если путь неизвестен во время компиляции.
var scene = preload("res://scene.tscn").instantiate()
# Добавьте узел как дочерний узел узла, к которому прикреплен скрипт.
add_child(scene)
// В C# нет предварительной загрузки, поэтому вам всегда придется использовать ResourceLoader.Load<PackedScene>().
var scene = ResourceLoader.Load<PackedScene>("res://scene.tscn").Instantiate();
// Добавьте узел как дочерний узел узла, к которому прикреплен скрипт.
AddChild(scene);
Пример: Сохраните узел с разными владельцами. Следующий пример создает 3 объекта: Node2D (node), RigidBody2D (body) и CollisionObject2D (collision). collision является дочерним элементом body, который является дочерним элементом node. Только body принадлежит node, и pack() сохранит только эти два узла, но не collision.
# Создайте объекты.
var node = Node2D.new()
var body = RigidBody2D.new()
var collision = CollisionShape2D.new()
# Создайте иерархию объектов.
body.add_child(collision)
node.add_child(body)
# Измените владельца `body`, но не `collision`.
body.owner = node
var scene = PackedScene.new()
# Теперь упакованы только `node` и `body`.
var result = scene.pack(node)
if result == OK:
var error = ResourceSaver.save(scene, "res://path/name.tscn") # Или "user://..."
if error != OK:
push_error("Произошла ошибка при сохранении сцены на диск.")
// Создайте объекты.
var node = new Node2D();
var body = new RigidBody2D();
var collision = new CollisionShape2D();
// Создайте иерархию объектов.
body.AddChild(collision);
node.AddChild(body);
// Измените владельца `body`, но не `collision`.
body.Owner = node;
var scene = new PackedScene();
// Теперь упакованы только `node` и `body`.
Error result = scene.Pack(node);
if (result == Error.Ok)
{
Error error = ResourceSaver.Save(scene, "res://path/name.tscn"); // Или "user://..."
if (error != Error.Ok)
{
GD.PushError("Произошла ошибка при сохранении сцены на диск.");
}
}
Обучающие материалы
Методы
can_instantiate() const |
|
get_state() const |
|
instantiate(edit_state: GenEditState = 0) const |
|
Перечисления
enum GenEditState: 🔗
GenEditState GEN_EDIT_STATE_DISABLED = 0
При передаче в instantiate() блокирует редактирование состояния сцены.
GenEditState GEN_EDIT_STATE_INSTANCE = 1
Если передано в instanceiate(), предоставляет локальные ресурсы сцены локальной сцене.
Примечание: Доступно только в сборках редактора.
GenEditState GEN_EDIT_STATE_MAIN = 2
Если передано в instanceiate(), предоставляет локальные ресурсы сцены локальной сцене. Только основная сцена должна получать основное состояние редактирования.
Примечание: Доступно только в сборках редактора.
GenEditState GEN_EDIT_STATE_MAIN_INHERITED = 3
Это похоже на GEN_EDIT_STATE_MAIN, но для случая, когда сцена создается как основа для другой.
Примечание: Доступно только в сборках редактора.
Описания метода
bool can_instantiate() const 🔗
Возвращает true, если файл сцены содержит узлы.
SceneState get_state() const 🔗
Возвращает SceneState, представляющий содержимое файла сцены.
Node instantiate(edit_state: GenEditState = 0) const 🔗
Создает экземпляр иерархии узлов сцены. Запускает создание дочерних экземпляров сцен. Запускает уведомление Node.NOTIFICATION_SCENE_INSTANTIATED на корневом узле.
Упаковывает узел path и все принадлежащие ему подузлы в этот PackedScene. Все существующие данные будут очищены. См. Node.owner.