PackedScene
Eredita: Resource < RefCounted < Object
Un'astrazione di una scena serializzata.
Descrizione
Un'interfaccia semplificata per un file di scena. Fornisce accesso alle operazioni e alle verifiche che possono essere eseguite sulla risorsa di scena stessa.
Può essere utilizzato per salvare un nodo in un file. Durante il salvataggio, il nodo e tutti i nodi posseduti da esso sono salvati (vedi la proprietà Node.owner).
Nota: Il nodo non deve possedere se stesso.
Esempio: Carica una scena salvata:
# Usa load() invece di preload() se il percorso non è noto in fase di compilazione.
var scene = preload("res://scene.tscn").instantiate()
# Aggiunge il nodo come figlio del nodo a cui è associato lo script.
add_child(scene)
// C# non ha preload, quindi è necessario usare sempre ResourceLoader.Load<PackedScene>().
var scene = ResourceLoader.Load<PackedScene>("res://scene.tscn").Instantiate();
// Aggiunge il nodo come figlio del nodo a cui è associato lo script.
AddChild(scene);
Esempio: Salva un nodo con proprietari diversi: L'esempio seguente crea 3 oggetti: Node2D (node), RigidBody2D (body) e CollisionObject2D (collision). collision è un figlio di body che è un figlio di node. Solo body è posseduto da node e pack() salverà quindi solo quei due nodi, ma non collision.
# Crea gli oggetti.
var node = Node2D.new()
var body = RigidBody2D.new()
var collision = CollisionShape2D.new()
# Crea la gerarchia degli oggetti.
body.add_child(collision)
node.add_child(body)
# Cambia il proprietario di `body`, ma non di `collision`.
body.owner = node
var scene = PackedScene.new()
# Solo `node` e `body` sono ora impacchettati.
var result = scene.pack(node)
if result == OK:
var error = ResourceSaver.save(scene, "res://path/name.tscn") # Or "user://..."
if error != OK:
push_error("Si è verificato un errore durante il salvataggio della scena su disco.")
// Crea gli oggetti.
var node = new Node2D();
var body = new RigidBody2D();
var collision = new CollisionShape2D();
// Crea la gerarchia degli oggetti.
body.AddChild(collision);
node.AddChild(body);
// Cambia il proprietario di `body`, ma non di `collision`.
body.Owner = node;
var scene = new PackedScene();
// Solo `node` e `body` sono ora impacchettati.
Error result = scene.Pack(node);
if (result == Error.Ok)
{
Error error = ResourceSaver.Save(scene, "res://path/name.tscn"); // Or "user://..."
if (error != Error.Ok)
{
GD.PushError("Si è verificato un errore durante il salvataggio della scena su disco.");
}
}
Tutorial
Metodi
can_instantiate() const |
|
get_state() const |
|
instantiate(edit_state: GenEditState = 0) const |
|
Enumerazioni
enum GenEditState: 🔗
GenEditState GEN_EDIT_STATE_DISABLED = 0
Se passato a instantiate(), blocca le modifiche allo stato della scena.
GenEditState GEN_EDIT_STATE_INSTANCE = 1
Se passato a instantiate(), fornisce risorse di scena locali alla scena locale.
Nota: Disponibile solo nelle build dell'editor.
GenEditState GEN_EDIT_STATE_MAIN = 2
Se passato a instantiate(), fornisce risorse di scena locali alla scena locale. Solo la scena principale dovrebbe ricevere lo stato di modifica principale.
Nota: Disponibile solo nelle build dell'editor.
GenEditState GEN_EDIT_STATE_MAIN_INHERITED = 3
È simile a GEN_EDIT_STATE_MAIN, ma per il caso in cui la scena viene istanziata per essere la base di un'altra.
Nota: Disponibile solo nelle build dell'editor.
Descrizioni dei metodi
bool can_instantiate() const 🔗
Restituisce true se il file di scena contiene nodi.
SceneState get_state() const 🔗
Restituisce il SceneState che rappresenta il contenuto del file di scena.
Node instantiate(edit_state: GenEditState = 0) const 🔗
Crea un'istanza della gerarchia dei nodi della scena. Attiva le istanziazioni delle scene figlio. Attiva una notifica Node.NOTIFICATION_SCENE_INSTANTIATED sul nodo radice.
Impacchetta il nodo path e tutti i suoi sottonodi posseduti in questo PackedScene. Tutti i dati esistenti saranno cancellati. Vedi Node.owner.