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#中,资源不再使用后不会立即释放,而是会定期运行垃圾回收机制,将不再使用的资源释放出来,这意味着未使用的资源在被移除之前会在内存中保留一段时间。
属性¶
方法¶
_get_rid() virtual const |
|
void |
_reset_state() virtual |
void |
_set_path_cache(path: String) virtual const |
void |
_setup_local_to_scene() virtual |
void |
|
generate_scene_unique_id() static |
|
get_id_for_path(path: String) const |
|
get_local_scene() const |
|
get_rid() const |
|
is_built_in() const |
|
void |
|
void |
set_id_for_path(path: String, id: String) |
void |
set_path_cache(path: String) |
void |
|
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 🔗
如果true,则资源对于使用它的所有场景的每个实例都是重复的。在运行时,可以在一个场景中修改资源,而不会影响其他实例(参见PackedScene.instantiate())。
注意:在运行时更改此属性对已创建的重复资源没有影响。
此资源的可选名称。定义后,将显示其值以表示检查器停靠站中的资源。对于内置脚本,该名称在脚本编辑器中显示为选项卡名称的一部分。
注意:某些资源格式不支持资源名称,您仍然可以在编辑器中或通过代码设置名称,但在重新加载资源时会丢失,例如,只有内置脚本才能有资源名称,而存储在单独文件中的脚本则不能。
此资源的唯一路径。如果它已保存到磁盘,则该值将是其文件路径。如果资源仅包含在场景中,则该值将是PackedScene的文件路径,后跟唯一标识符。
注意:如果之前已经加载了具有相同路径的资源,手动设置此属性可能会失败。如有必要,请使用take_over_path()。
String resource_scene_unique_id 🔗
相对于此资源的场景的唯一标识符。如果留空,当此资源保存在PackedScene中时,会自动生成ID。如果资源不在场景中,则默认情况下此属性为空。
注意:保存PackedScene时,如果同一场景中的多个资源使用相同的ID,则只有场景层次结构中最早的资源保留原始ID。其他资源从generate_scene_unique_id()分配新的ID。
注意:设置此属性不会发出changed信号。
警告:设置时,ID只能由字母、数字和下划线组成。否则,它将失败并默认为随机生成的ID。
方法说明¶
RID _get_rid() virtual const 🔗
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属性的新资源。
如果subresources为false,则返回浅拷贝;子资源中的嵌套资源不重复,与原始资源共享(有一个例外;见下文)。如果subresources为true,则返回深拷贝;嵌套子资源将被复制,不共享(有两个例外;见下文)。
subresources通常受到尊重,但以下例外:
-具有@GlobalScope.PROPERTY_USAGE_ALWAYS_DUPLICATE标志的子资源属性总是重复的。
-带有@GlobalScope.PROPERTY_USAGE_NEVER_DUPLICATE标志的子资源属性永远不会重复。
-Array和Dictionary属性中的子资源永远不会重复。
注意:对于自定义资源,如果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(或空RID)。许多资源(如Texture2D、Mesh等)是存储在专用服务器(DisplayServer、RenderingServer等)中的资源的高级抽象,因此此函数将返回原始RID。
如果资源是内置的(来自引擎),则返回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,可能会覆盖此路径的现有缓存条目。进一步尝试按路径加载被覆盖的资源将返回此资源。