Table of Contents

Class Resource

Namespace
Godot
Assembly
GodotSharp.dll

Resource is the base class for all Godot-specific resource types, serving primarily as data containers. Since they inherit from RefCounted, resources are reference-counted and freed when no longer in use. They can also be nested within other resources, and saved on disk. Once loaded from disk, further attempts to load a resource by ResourcePath returns the same reference. PackedScene, one of the most common GodotObjects in a Godot project, is also a resource, uniquely capable of storing and instantiating the Nodes it contains as many times as desired.

In GDScript, resources can loaded from disk by their ResourcePath using @GDScript.load or @GDScript.preload.

Note: In C#, resources will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free resources that are no longer in use. This means that unused resources will linger on for a while before being removed.

public class Resource : RefCounted, IDisposable
Inheritance
Resource
Implements
Derived
Inherited Members

Constructors

Resource()

public Resource()

Properties

ResourceLocalToScene

If true, the resource is duplicated for each instance of all scenes using it. At run-time, the resource can be modified in one scene without affecting other instances (see Instantiate(GenEditState)).

Note: Changing this property at run-time has no effect on already created duplicate resources.

public bool ResourceLocalToScene { get; set; }

Property Value

bool

ResourceName

An optional name for this resource. When defined, its value is displayed to represent the resource in the Inspector dock. For built-in scripts, the name is displayed as part of the tab name in the script editor.

Note: Some resource formats do not support resource names. You can still set the name in the editor or via code, but it will be lost when the resource is reloaded. For example, only built-in scripts can have a resource name, while scripts stored in separate files cannot.

public string ResourceName { get; set; }

Property Value

string

ResourcePath

The unique path to this resource. If it has been saved to disk, the value will be its filepath. If the resource is exclusively contained within a scene, the value will be the PackedScene's filepath, followed by a unique identifier.

Note: Setting this property manually may fail if a resource with the same path has already been previously loaded. If necessary, use TakeOverPath(string).

public string ResourcePath { get; set; }

Property Value

string

Methods

Duplicate(bool)

Duplicates this resource, returning a new resource with its exported or Storage properties copied from the original.

If subresources is false, a shallow copy is returned; nested resources within subresources are not duplicated and are shared from the original resource. If subresources is true, a deep copy is returned; nested subresources will be duplicated and are not shared.

Subresource properties with the AlwaysDuplicate flag are always duplicated even with subresources set to false, and properties with the NeverDuplicate flag are never duplicated even with subresources set to true.

Note: For custom resources, this method will fail if GodotObject() has been defined with required parameters.

public Resource Duplicate(bool subresources = false)

Parameters

subresources bool

Returns

Resource

EmitChanged()

Emits the Changed signal. This method is called automatically for some built-in resources.

Note: For custom resources, it's recommended to call this method whenever a meaningful change occurs, such as a modified property. This ensures that custom GodotObjects depending on the resource are properly updated.

var damage:
      set(new_value):
          if damage != new_value:
              damage = new_value
              emit_changed()
public void EmitChanged()

GetLocalScene()

If ResourceLocalToScene is set to true and the resource has been loaded from a PackedScene instantiation, returns the root Node of the scene where this resource is used. Otherwise, returns null.

public Node GetLocalScene()

Returns

Node

GetRid()

Returns the Rid of this resource (or an empty RID). Many resources (such as Texture2D, Mesh, and so on) are high-level abstractions of resources stored in a specialized server (DisplayServer, RenderingServer, etc.), so this function will return the original Rid.

public Rid GetRid()

Returns

Rid

HasGodotClassMethod(in godot_string_name)

Check if the type contains a method with the given name. This method is used by Godot to check if a method exists before invoking it. Do not call or override this method.

protected override bool HasGodotClassMethod(in godot_string_name method)

Parameters

method godot_string_name

Name of the method to check for.

Returns

bool

HasGodotClassSignal(in godot_string_name)

Check if the type contains a signal with the given name. This method is used by Godot to check if a signal exists before raising it. Do not call or override this method.

protected override bool HasGodotClassSignal(in godot_string_name signal)

Parameters

signal godot_string_name

Name of the signal to check for.

Returns

bool

InvokeGodotClassMethod(in godot_string_name, NativeVariantPtrArgs, out godot_variant)

Invokes the method with the given name, using the given arguments. This method is used by Godot to invoke methods from the engine side. Do not call or override this method.

protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)

Parameters

method godot_string_name

Name of the method to invoke.

args NativeVariantPtrArgs

Arguments to use with the invoked method.

ret godot_variant

Value returned by the invoked method.

Returns

bool

SetupLocalToScene()

Calls _SetupLocalToScene(). If ResourceLocalToScene is set to true, this method is automatically called from Instantiate(GenEditState) by the newly duplicated resource within the scene instance.

Deprecated. This method should only be called internally. Override _SetupLocalToScene() instead.

[Obsolete("This method is deprecated.")]
public void SetupLocalToScene()

TakeOverPath(string)

Sets the ResourcePath to path, potentially overriding an existing cache entry for this path. Further attempts to load an overridden resource by path will instead return this resource.

public void TakeOverPath(string path)

Parameters

path string

_GetRid()

Override this method to return a custom Rid when GetRid() is called.

public virtual Rid _GetRid()

Returns

Rid

_SetupLocalToScene()

Override this method to customize the newly duplicated resource created from Instantiate(GenEditState), if the original's ResourceLocalToScene is set to true.

Example: Set a random damage value to every local resource from an instantiated scene.

extends Resource

var damage = 0

func _setup_local_to_scene(): damage = randi_range(10, 40)

public virtual void _SetupLocalToScene()

Events

Changed

Emitted when the resource changes, usually when one of its properties is modified. See also EmitChanged().

Note: This signal is not emitted automatically for properties of custom resources. If necessary, a setter needs to be created to emit the signal.

public event Action Changed

Event Type

Action

SetupLocalToSceneRequested

Emitted by a newly duplicated resource with ResourceLocalToScene set to true.

Deprecated. This signal is only emitted when the resource is created. Override _SetupLocalToScene() instead.

[Obsolete("This signal is deprecated.")]
public event Action SetupLocalToSceneRequested

Event Type

Action