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
對序列化場景的抽象。
說明
A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself.
Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see Node.owner property).
Note: The node doesn't need to own itself.
Example: Load a saved scene:
# Use load() instead of preload() if the path isn't known at compile-time.
var scene = preload("res://scene.tscn").instantiate()
# Add the node as a child of the node the script is attached to.
add_child(scene)
// C# has no preload, so you have to always use ResourceLoader.Load<PackedScene>().
var scene = ResourceLoader.Load<PackedScene>("res://scene.tscn").Instantiate();
// Add the node as a child of the node the script is attached to.
AddChild(scene);
Example: Save a node with different owners. The following example creates 3 objects: Node2D (node), RigidBody2D (body) and CollisionObject2D (collision). collision is a child of body which is a child of node. Only body is owned by node and pack() will therefore only save those two nodes, but not collision.
# Create the objects.
var node = Node2D.new()
var body = RigidBody2D.new()
var collision = CollisionShape2D.new()
# Create the object hierarchy.
body.add_child(collision)
node.add_child(body)
# Change owner of `body`, but not of `collision`.
body.owner = node
var scene = PackedScene.new()
# Only `node` and `body` are now packed.
var result = scene.pack(node)
if result == OK:
var error = ResourceSaver.save(scene, "res://path/name.tscn") # Or "user://..."
if error != OK:
push_error("An error occurred while saving the scene to disk.")
// Create the objects.
var node = new Node2D();
var body = new RigidBody2D();
var collision = new CollisionShape2D();
// Create the object hierarchy.
body.AddChild(collision);
node.AddChild(body);
// Change owner of `body`, but not of `collision`.
body.Owner = node;
var scene = new PackedScene();
// Only `node` and `body` are now packed.
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("An error occurred while saving the scene to disk.");
}
}
教學
方法
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
如果傳遞給 instantiate(),則會向本地場景提供本地場景資源。
注意:僅在編輯器建構中可用。
GenEditState GEN_EDIT_STATE_MAIN = 2
如果傳遞給 instantiate(),則會向本地場景提供本地場景資源。只有主場景應該接收主編輯狀態。
注意:僅在編輯器建構中可用。
GenEditState GEN_EDIT_STATE_MAIN_INHERITED = 3
與 GEN_EDIT_STATE_MAIN 類似,但適用於場景作為另一個場景的基底類別實例化的情況。
注意:僅在編輯器建構中可用。
方法說明
bool can_instantiate() const 🔗
如果場景檔有節點,返回 true。
SceneState get_state() const 🔗
Returns the SceneState representing the scene file contents.
Node instantiate(edit_state: GenEditState = 0) const 🔗
產生實體該場景的節點架構。觸發子場景的產生實體。在根節點上觸發 Node.NOTIFICATION_SCENE_INSTANTIATED 通知。
Packs the path node, and all owned sub-nodes, into this PackedScene. Any existing data will be cleared. See Node.owner.