class_resource.rst 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/3.6/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/3.6/doc/classes/Resource.xml.
  6. .. _class_Resource:
  7. Resource
  8. ========
  9. **Inherits:** :ref:`Reference<class_Reference>` **<** :ref:`Object<class_Object>`
  10. **Inherited By:** :ref:`Animation<class_Animation>`, :ref:`AnimationNode<class_AnimationNode>`, :ref:`AnimationNodeStateMachinePlayback<class_AnimationNodeStateMachinePlayback>`, :ref:`AnimationNodeStateMachineTransition<class_AnimationNodeStateMachineTransition>`, :ref:`AudioBusLayout<class_AudioBusLayout>`, :ref:`AudioEffect<class_AudioEffect>`, :ref:`AudioStream<class_AudioStream>`, :ref:`BakedLightmapData<class_BakedLightmapData>`, :ref:`BitMap<class_BitMap>`, :ref:`ButtonGroup<class_ButtonGroup>`, :ref:`CryptoKey<class_CryptoKey>`, :ref:`CubeMap<class_CubeMap>`, :ref:`Curve<class_Curve>`, :ref:`Curve2D<class_Curve2D>`, :ref:`Curve3D<class_Curve3D>`, :ref:`DynamicFontData<class_DynamicFontData>`, :ref:`EditorSettings<class_EditorSettings>`, :ref:`EditorSpatialGizmoPlugin<class_EditorSpatialGizmoPlugin>`, :ref:`Environment<class_Environment>`, :ref:`Font<class_Font>`, :ref:`GDNativeLibrary<class_GDNativeLibrary>`, :ref:`GIProbeData<class_GIProbeData>`, :ref:`GLTFAccessor<class_GLTFAccessor>`, :ref:`GLTFAnimation<class_GLTFAnimation>`, :ref:`GLTFBufferView<class_GLTFBufferView>`, :ref:`GLTFCamera<class_GLTFCamera>`, :ref:`GLTFCollider<class_GLTFCollider>`, :ref:`GLTFDocument<class_GLTFDocument>`, :ref:`GLTFDocumentExtension<class_GLTFDocumentExtension>`, :ref:`GLTFLight<class_GLTFLight>`, :ref:`GLTFMesh<class_GLTFMesh>`, :ref:`GLTFNode<class_GLTFNode>`, :ref:`GLTFPhysicsBody<class_GLTFPhysicsBody>`, :ref:`GLTFSkeleton<class_GLTFSkeleton>`, :ref:`GLTFSkin<class_GLTFSkin>`, :ref:`GLTFSpecGloss<class_GLTFSpecGloss>`, :ref:`GLTFState<class_GLTFState>`, :ref:`GLTFTexture<class_GLTFTexture>`, :ref:`GLTFTextureSampler<class_GLTFTextureSampler>`, :ref:`Gradient<class_Gradient>`, :ref:`Image<class_Image>`, :ref:`InputEvent<class_InputEvent>`, :ref:`Material<class_Material>`, :ref:`Mesh<class_Mesh>`, :ref:`MeshLibrary<class_MeshLibrary>`, :ref:`MultiMesh<class_MultiMesh>`, :ref:`NavigationMesh<class_NavigationMesh>`, :ref:`NavigationPolygon<class_NavigationPolygon>`, :ref:`OccluderPolygon2D<class_OccluderPolygon2D>`, :ref:`OccluderShape<class_OccluderShape>`, :ref:`OpenSimplexNoise<class_OpenSimplexNoise>`, :ref:`PackedDataContainer<class_PackedDataContainer>`, :ref:`PackedScene<class_PackedScene>`, :ref:`PhysicsMaterial<class_PhysicsMaterial>`, :ref:`PolygonPathFinder<class_PolygonPathFinder>`, :ref:`RichTextEffect<class_RichTextEffect>`, :ref:`Script<class_Script>`, :ref:`Shader<class_Shader>`, :ref:`Shape<class_Shape>`, :ref:`Shape2D<class_Shape2D>`, :ref:`ShortCut<class_ShortCut>`, :ref:`Skin<class_Skin>`, :ref:`Sky<class_Sky>`, :ref:`SpriteFrames<class_SpriteFrames>`, :ref:`StyleBox<class_StyleBox>`, :ref:`TextFile<class_TextFile>`, :ref:`Texture<class_Texture>`, :ref:`TextureLayered<class_TextureLayered>`, :ref:`Theme<class_Theme>`, :ref:`TileSet<class_TileSet>`, :ref:`Translation<class_Translation>`, :ref:`VideoStream<class_VideoStream>`, :ref:`VisualScriptNode<class_VisualScriptNode>`, :ref:`VisualShaderNode<class_VisualShaderNode>`, :ref:`World<class_World>`, :ref:`World2D<class_World2D>`, :ref:`X509Certificate<class_X509Certificate>`
  11. Base class for serializable objects.
  12. .. rst-class:: classref-introduction-group
  13. Description
  14. -----------
  15. Resource is the base class for all Godot-specific resource types, serving primarily as data containers. Since they inherit from :ref:`Reference<class_Reference>`, resources are reference-counted and freed when no longer in use. They can also be nested within other resources, and saved on disk. :ref:`PackedScene<class_PackedScene>`, one of the most common :ref:`Object<class_Object>`\ s in a Godot project, is also a resource, uniquely capable of storing and instantiating the :ref:`Node<class_Node>`\ s it contains as many times as desired.
  16. In GDScript, resources can loaded from disk by their :ref:`resource_path<class_Resource_property_resource_path>` using :ref:`@GDScript.load<class_@GDScript_method_load>` or :ref:`@GDScript.preload<class_@GDScript_method_preload>`.
  17. The engine keeps a global cache of all loaded resources, referenced by paths (see :ref:`ResourceLoader.has_cached<class_ResourceLoader_method_has_cached>`). A resource will be cached when loaded for the first time and removed from cache once all references are released. When a resource is cached, subsequent loads using its path will return the cached reference.
  18. \ **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.
  19. .. rst-class:: classref-introduction-group
  20. Tutorials
  21. ---------
  22. - :doc:`Resources <../tutorials/scripting/resources>`
  23. - :doc:`When and how to avoid using nodes for everything <../tutorials/best_practices/node_alternatives>`
  24. .. rst-class:: classref-reftable-group
  25. Properties
  26. ----------
  27. .. table::
  28. :widths: auto
  29. +-----------------------------+---------------------------------------------------------------------------------+-----------+
  30. | :ref:`bool<class_bool>` | :ref:`resource_local_to_scene<class_Resource_property_resource_local_to_scene>` | ``false`` |
  31. +-----------------------------+---------------------------------------------------------------------------------+-----------+
  32. | :ref:`String<class_String>` | :ref:`resource_name<class_Resource_property_resource_name>` | ``""`` |
  33. +-----------------------------+---------------------------------------------------------------------------------+-----------+
  34. | :ref:`String<class_String>` | :ref:`resource_path<class_Resource_property_resource_path>` | ``""`` |
  35. +-----------------------------+---------------------------------------------------------------------------------+-----------+
  36. .. rst-class:: classref-reftable-group
  37. Methods
  38. -------
  39. .. table::
  40. :widths: auto
  41. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  42. | void | :ref:`_setup_local_to_scene<class_Resource_method__setup_local_to_scene>` **(** **)** |virtual| |
  43. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  44. | :ref:`Resource<class_Resource>` | :ref:`duplicate<class_Resource_method_duplicate>` **(** :ref:`bool<class_bool>` subresources=false **)** |const| |
  45. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  46. | void | :ref:`emit_changed<class_Resource_method_emit_changed>` **(** **)** |
  47. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  48. | :ref:`Node<class_Node>` | :ref:`get_local_scene<class_Resource_method_get_local_scene>` **(** **)** |const| |
  49. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  50. | :ref:`RID<class_RID>` | :ref:`get_rid<class_Resource_method_get_rid>` **(** **)** |const| |
  51. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  52. | void | :ref:`setup_local_to_scene<class_Resource_method_setup_local_to_scene>` **(** **)** |
  53. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  54. | void | :ref:`take_over_path<class_Resource_method_take_over_path>` **(** :ref:`String<class_String>` path **)** |
  55. +---------------------------------+------------------------------------------------------------------------------------------------------------------+
  56. .. rst-class:: classref-section-separator
  57. ----
  58. .. rst-class:: classref-descriptions-group
  59. Signals
  60. -------
  61. .. _class_Resource_signal_changed:
  62. .. rst-class:: classref-signal
  63. **changed** **(** **)**
  64. Emitted when the resource changes, usually when one of its properties is modified. See also :ref:`emit_changed<class_Resource_method_emit_changed>`.
  65. \ **Note:** This signal is not emitted automatically for custom resources, which means that you need to create a setter and emit the signal yourself.
  66. .. rst-class:: classref-section-separator
  67. ----
  68. .. rst-class:: classref-descriptions-group
  69. Property Descriptions
  70. ---------------------
  71. .. _class_Resource_property_resource_local_to_scene:
  72. .. rst-class:: classref-property
  73. :ref:`bool<class_bool>` **resource_local_to_scene** = ``false``
  74. .. rst-class:: classref-property-setget
  75. - void **set_local_to_scene** **(** :ref:`bool<class_bool>` value **)**
  76. - :ref:`bool<class_bool>` **is_local_to_scene** **(** **)**
  77. 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 :ref:`PackedScene.instance<class_PackedScene_method_instance>`).
  78. \ **Note:** Changing this property at run-time has no effect on already created duplicate resources.
  79. .. rst-class:: classref-item-separator
  80. ----
  81. .. _class_Resource_property_resource_name:
  82. .. rst-class:: classref-property
  83. :ref:`String<class_String>` **resource_name** = ``""``
  84. .. rst-class:: classref-property-setget
  85. - void **set_name** **(** :ref:`String<class_String>` value **)**
  86. - :ref:`String<class_String>` **get_name** **(** **)**
  87. 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.
  88. \ **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.
  89. .. rst-class:: classref-item-separator
  90. ----
  91. .. _class_Resource_property_resource_path:
  92. .. rst-class:: classref-property
  93. :ref:`String<class_String>` **resource_path** = ``""``
  94. .. rst-class:: classref-property-setget
  95. - void **set_path** **(** :ref:`String<class_String>` value **)**
  96. - :ref:`String<class_String>` **get_path** **(** **)**
  97. 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 :ref:`PackedScene<class_PackedScene>`'s filepath, followed by a unique identifier.
  98. \ **Note:** Setting this property manually may fail if a resource with the same path has already been previously loaded. If necessary, use :ref:`take_over_path<class_Resource_method_take_over_path>`.
  99. .. rst-class:: classref-section-separator
  100. ----
  101. .. rst-class:: classref-descriptions-group
  102. Method Descriptions
  103. -------------------
  104. .. _class_Resource_method__setup_local_to_scene:
  105. .. rst-class:: classref-method
  106. void **_setup_local_to_scene** **(** **)** |virtual|
  107. Override this method to customize the newly duplicated resource created from :ref:`PackedScene.instance<class_PackedScene_method_instance>`, if the original's :ref:`resource_local_to_scene<class_Resource_property_resource_local_to_scene>` is set to ``true``.
  108. \ **Example:** Set a random ``damage`` value to every local resource from an instantiated scene.
  109. ::
  110. extends Resource
  111. var damage = 0
  112. func _setup_local_to_scene():
  113. damage = rand_range(10, 40)
  114. .. rst-class:: classref-item-separator
  115. ----
  116. .. _class_Resource_method_duplicate:
  117. .. rst-class:: classref-method
  118. :ref:`Resource<class_Resource>` **duplicate** **(** :ref:`bool<class_bool>` subresources=false **)** |const|
  119. Duplicates this resource, returning a new resource with its ``export``\ ed or :ref:`@GlobalScope.PROPERTY_USAGE_STORAGE<class_@GlobalScope_constant_PROPERTY_USAGE_STORAGE>` properties copied from the original.
  120. 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.
  121. \ **Note:** For custom resources, this method will fail if :ref:`Object._init<class_Object_method__init>` has been defined with required parameters.
  122. .. rst-class:: classref-item-separator
  123. ----
  124. .. _class_Resource_method_emit_changed:
  125. .. rst-class:: classref-method
  126. void **emit_changed** **(** **)**
  127. Emits the :ref:`changed<class_Resource_signal_changed>` signal. This method is called automatically for some built-in resources.
  128. \ **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 :ref:`Object<class_Object>`\ s depending on the resource are properly updated.
  129. ::
  130. var damage setget set_damage
  131. func set_damage(new_value):
  132. if damage != new_value:
  133. damage = new_value
  134. emit_changed()
  135. .. rst-class:: classref-item-separator
  136. ----
  137. .. _class_Resource_method_get_local_scene:
  138. .. rst-class:: classref-method
  139. :ref:`Node<class_Node>` **get_local_scene** **(** **)** |const|
  140. If :ref:`resource_local_to_scene<class_Resource_property_resource_local_to_scene>` is set to ``true`` and the resource has been loaded from a :ref:`PackedScene<class_PackedScene>` instantiation, returns the root :ref:`Node<class_Node>` of the scene where this resource is used. Otherwise, returns ``null``.
  141. .. rst-class:: classref-item-separator
  142. ----
  143. .. _class_Resource_method_get_rid:
  144. .. rst-class:: classref-method
  145. :ref:`RID<class_RID>` **get_rid** **(** **)** |const|
  146. Returns the :ref:`RID<class_RID>` of this resource (or an empty RID). Many resources (such as :ref:`Texture<class_Texture>`, :ref:`Shape<class_Shape>`, and so on) are high-level abstractions of resources stored in a specialized server (:ref:`VisualServer<class_VisualServer>`, :ref:`PhysicsServer<class_PhysicsServer>`, etc.), so this function will return the original :ref:`RID<class_RID>`.
  147. .. rst-class:: classref-item-separator
  148. ----
  149. .. _class_Resource_method_setup_local_to_scene:
  150. .. rst-class:: classref-method
  151. void **setup_local_to_scene** **(** **)**
  152. Calls :ref:`_setup_local_to_scene<class_Resource_method__setup_local_to_scene>`. If :ref:`resource_local_to_scene<class_Resource_property_resource_local_to_scene>` is set to ``true``, this method is automatically called from :ref:`PackedScene.instance<class_PackedScene_method_instance>` by the newly duplicated resource within the scene instance.
  153. .. rst-class:: classref-item-separator
  154. ----
  155. .. _class_Resource_method_take_over_path:
  156. .. rst-class:: classref-method
  157. void **take_over_path** **(** :ref:`String<class_String>` path **)**
  158. Sets the :ref:`resource_path<class_Resource_property_resource_path>` 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.
  159. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  160. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  161. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  162. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`