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
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
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
Methods
Duplicate(bool)
Duplicates this resource, returning a new resource with its export
ed 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
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
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
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_nameName of the method to check for.
Returns
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_nameName of the signal to check for.
Returns
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_nameName of the method to invoke.
args
NativeVariantPtrArgsArguments to use with the invoked method.
ret
godot_variantValue returned by the invoked method.
Returns
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()
public virtual Rid _GetRid()
Returns
_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
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