Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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.