Resource

继承: RefCounted < Object

派生: Animation, AnimationLibrary, AnimationNode, AnimationNodeStateMachinePlayback, AnimationNodeStateMachineTransition, AudioBusLayout, AudioEffect, AudioStream, BitMap, BoneMap, ButtonGroup, CameraAttributes, ColorPalette, Compositor, CompositorEffect, CryptoKey, Curve, Curve2D, Curve3D, EditorNode3DGizmoPlugin, EditorSettings, Environment, Font, GLTFAccessor, GLTFAnimation, GLTFBufferView, GLTFCamera, GLTFDocument, GLTFDocumentExtension, GLTFLight, GLTFMesh, GLTFNode, GLTFPhysicsBody, GLTFPhysicsShape, GLTFSkeleton, GLTFSkin, GLTFSpecGloss, GLTFState, GLTFTexture, GLTFTextureSampler, Gradient, Image, ImporterMesh, InputEvent, JSON, LabelSettings, LightmapGIData, Material, Mesh, MeshLibrary, MissingResource, MultiMesh, NavigationMesh, NavigationMeshSourceGeometryData2D, NavigationMeshSourceGeometryData3D, NavigationPolygon, Noise, Occluder3D, OccluderPolygon2D, OggPacketSequence, OpenXRAction, OpenXRActionMap, OpenXRActionSet, OpenXRBindingModifier, OpenXRHapticBase, OpenXRInteractionProfile, OpenXRIPBinding, PackedDataContainer, PackedScene, PhysicsMaterial, PolygonPathFinder, RDShaderFile, RDShaderSPIRV, RichTextEffect, S3Extension, SceneReplicationConfig, Script, Shader, ShaderInclude, Shape2D, Shape3D, Shortcut, SkeletonModification2D, SkeletonModificationStack2D, SkeletonProfile, Skin, Sky, SpriteFrames, StyleBox, SyntaxHighlighter, Texture, Theme, TileMapPattern, TileSet, TileSetSource, Translation, VideoStream, VideoStreamPlayback, VisualShaderNode, VoxelGIData, World2D, World3D, X509Certificate

可序列化对象的基类。

描述

资源是所有i3D特定资源类型的基类,主要用作数据容器。由于它们继承自RefCounted,因此资源在不再使用时被引用计数和释放。它们也可以嵌套在其他资源中,并保存在磁盘上。PackedScene是i3D项目中最常见的Object之一,也是一种资源,唯一能够根据需要多次存储和实例化它包含的Item

在S3Script中,资源可以通过其resource_path使用@S3Script.load()@S3Script.preload()从磁盘加载。

引擎保留所有加载资源的全局缓存,由路径引用(参见ResourceLoader.has_cached())。资源将在第一次加载时被缓存,并在释放所有引用后从缓存中删除。当资源被缓存时,使用其路径的后续加载将返回缓存的引用。

注意:在C#中,资源不再使用后不会立即释放,而是会定期运行垃圾回收机制,将不再使用的资源释放出来,这意味着未使用的资源在被移除之前会在内存中保留一段时间。

属性

方法

RID

_get_rid() virtual const

void

_reset_state() virtual

void

_set_path_cache(path: String) virtual const

void

_setup_local_to_scene() virtual

Resource

duplicate(subresources: bool = false) const

void

emit_changed()

String

generate_scene_unique_id() static

String

get_id_for_path(path: String) const

Item

get_local_scene() const

RID

get_rid() const

bool

is_built_in() const

void

reset_state()

void

set_id_for_path(path: String, id: String)

void

set_path_cache(path: String)

void

setup_local_to_scene()

void

take_over_path(path: String)


信号

changed() 🔗

当资源更改时发出,通常是当它的一个属性被修改时。另请参见emit_changed()

注意:对于自定义资源的属性,此信号不会自动发出。如有必要,需要创建一个setter来发出信号。


setup_local_to_scene_requested() 🔗

已弃用: 这个信号只会在资源创建时发出。请改为覆盖 _setup_local_to_scene()

resource_local_to_scene设置为true的新复制资源发出。


属性说明

bool resource_local_to_scene = false 🔗

  • void set_local_to_scene(value: bool)

  • bool is_local_to_scene()

如果true,则资源对于使用它的所有场景的每个实例都是重复的。在运行时,可以在一个场景中修改资源,而不会影响其他实例(参见PackedScene.instantiate())。

注意:在运行时更改此属性对已创建的重复资源没有影响。


String resource_name = "" 🔗

此资源的可选名称。定义后,将显示其值以表示检查器停靠站中的资源。对于内置脚本,该名称在脚本编辑器中显示为选项卡名称的一部分。

注意:某些资源格式不支持资源名称,您仍然可以在编辑器中或通过代码设置名称,但在重新加载资源时会丢失,例如,只有内置脚本才能有资源名称,而存储在单独文件中的脚本则不能。


String resource_path = "" 🔗

此资源的唯一路径。如果它已保存到磁盘,则该值将是其文件路径。如果资源仅包含在场景中,则该值将是PackedScene的文件路径,后跟唯一标识符。

注意:如果之前已经加载了具有相同路径的资源,手动设置此属性可能会失败。如有必要,请使用take_over_path()


String resource_scene_unique_id 🔗

  • void set_scene_unique_id(value: String)

  • String get_scene_unique_id()

相对于此资源的场景的唯一标识符。如果留空,当此资源保存在PackedScene中时,会自动生成ID。如果资源不在场景中,则默认情况下此属性为空。

注意:保存PackedScene时,如果同一场景中的多个资源使用相同的ID,则只有场景层次结构中最早的资源保留原始ID。其他资源从generate_scene_unique_id()分配新的ID。

注意:设置此属性不会发出changed信号。

警告:设置时,ID只能由字母、数字和下划线组成。否则,它将失败并默认为随机生成的ID。


方法说明

RID _get_rid() virtual const 🔗

重写此方法以在调用get_rid()时返回自定义RID


void _reset_state() virtual 🔗

对于通过Object._validate_property()Object._get_property_list()使用可变数量属性的资源,应实现此方法以正确清除资源的状态。


void _set_path_cache(path: String) virtual const 🔗

将资源的路径设置为path,而不涉及资源缓存。


void _setup_local_to_scene() virtual 🔗

如果原始资源的resource_local_to_scene设置为true,重写此方法可自定义从PackedScene.instantiate()创建的新复制资源。

Example:为实例化场景中的每个本地资源设置随机的damage值:

extends Resource

var damage = 0

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

Resource duplicate(subresources: bool = false) const 🔗

复制此资源,返回具有从原始资源复制的导出ed或@GlobalScope.PROPERTY_USAGE_STORAGE属性的新资源。

如果subresourcesfalse,则返回浅拷贝;子资源中的嵌套资源不重复,与原始资源共享(有一个例外;见下文)。如果subresourcestrue,则返回深拷贝;嵌套子资源将被复制,不共享(有两个例外;见下文)。

subresources通常受到尊重,但以下例外:

-具有@GlobalScope.PROPERTY_USAGE_ALWAYS_DUPLICATE标志的子资源属性总是重复的。

-带有@GlobalScope.PROPERTY_USAGE_NEVER_DUPLICATE标志的子资源属性永远不会重复。

-ArrayDictionary属性中的子资源永远不会重复。

注意:对于自定义资源,如果Object._init()已使用所需参数定义,则此方法将失败。


void emit_changed() 🔗

发出changed信号。对于某些内置资源,此方法会自动调用。

注意:对于自定义资源,建议在发生任何有意义的更改(例如属性修改)时调用此方法。这样可确保依赖该资源的自定义Object得到正确更新。

var damage:
    set(new_value):
        if damage != new_value:
            damage = new_value
            emit_changed()

String generate_scene_unique_id() static 🔗

根据当前日期、时间和随机值为PackedScene中包含的资源生成唯一标识符。返回的字符串仅由字母(atoy)和数字(0to8)组成。另请参见resource_scene_unique_id


String get_id_for_path(path: String) const 🔗

从资源缓存中返回具有给定path的资源的唯一标识符。如果资源未加载和缓存,则返回一个空字符串。

注意:此方法仅在编辑器上下文中运行时实现。在运行时,它返回一个空字符串。


Item get_local_scene() const 🔗

如果resource_local_to_scene设置为true并且资源已从PackedScene实例化加载,则返回使用该资源的场景的根Item。否则,返回null


RID get_rid() const 🔗

返回此资源的RID(或空RID)。许多资源(如Texture2DMesh等)是存储在专用服务器(DisplayServerRenderingServer等)中的资源的高级抽象,因此此函数将返回原始RID


bool is_built_in() const 🔗

如果资源是内置的(来自引擎),则返回true,如果资源是用户定义的,则返回false


void reset_state() 🔗

对于使用可变数量属性的资源,通过Object._validate_property()Object._get_property_list(),重写_reset_state()以正确清除资源的状态。


void set_id_for_path(path: String, id: String) 🔗

将资源缓存中具有给定path的资源的唯一标识符设置为id。如果唯一标识符为空,则使用path的缓存条目(如果存在)将被删除。

注意:此方法仅在编辑器上下文中运行时实现。


void set_path_cache(path: String) 🔗

将资源的路径设置为path,而不涉及资源缓存。


void setup_local_to_scene() 🔗

已弃用: 这个方法只应在内部调用。

调用_setup_local_to_scene()。如果resource_local_to_scene设置为true,则场景实例中新复制的资源会自动从PackedScene.instantiate()调用此方法。


void take_over_path(path: String) 🔗

resource_path设置为path,可能会覆盖此路径的现有缓存条目。进一步尝试按路径加载被覆盖的资源将返回此资源。