ResourcePreloader
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — ResourcePreloader
ResourcePreloader
节点继承关系
继承链:Node -> ResourcePreloader
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
ResourcePreloader 是一个"资源预加载器"。你可以在编辑器里提前把需要的资源(图片、声音、场景等)拖拽进去,游戏启动时这些资源就会被提前加载到内存中,之后随时可以取用。
打个比方:就像你去食堂吃饭前,先把所有想吃的菜提前盛到托盘上(预加载),等你想吃的时候直接从托盘上拿就行,不用再去窗口排队(加载)。
简单说:它帮你提前把资源加载到内存,用的时候直接拿,避免使用时临时加载导致卡顿。
使用频率:★★ 偶尔使用
节点用途
- 音效预加载:提前加载所有游戏音效,播放时不会卡顿
- 场景预加载:提前加载即将用到的场景,切换时更流畅
- 图片预加载:提前加载所有精灵帧图片
- 通用资源池:集中管理所有需要用到的资源
使用场景
| 场景 | 说明 |
|---|---|
| 射击游戏 | 提前加载所有枪械音效,射击时即时播放 |
| 格斗游戏 | 提前加载所有角色的动画和音效 |
| 场景切换 | 提前加载下一个场景的资源 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| 任意需要资源的节点 | 通过 ResourcePreloader 获取预加载的资源 |
生效必备素材/资源
需要在编辑器的"资源"属性中手动添加要预加载的资源。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| resources | Array[Resource] | [] | ResourcePreloader | 预加载的资源数组,在编辑器中添加 |
信号
ResourcePreloader 没有自己的特有信号。
常用方法
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| GetResource(name) | name: string | Resource | 根据名称获取预加载的资源 |
| GetResourceList() | 无 | PackedStringArray | 获取所有预加载资源的名称列表 |
代码示例
C
// C# - 音效管理器:使用 ResourcePreloader 预加载音效
using Godot;
public partial class SoundManager : Node
{
private ResourcePreloader _preloader;
public override void _Ready()
{
_preloader = GetNode<ResourcePreloader>("ResourcePreloader");
// 查看所有预加载的资源名称
var resourceNames = _preloader.GetResourceList();
GD.Print($"已预加载的资源: {string.Join(", ", resourceNames)}");
}
public void PlaySound(string name)
{
// 从预加载器中获取音效资源
var sound = _preloader.GetResource(name) as AudioStream;
if (sound != null)
{
var player = new AudioStreamPlayer();
player.Stream = sound;
AddChild(player);
player.Play();
}
}
}GDScript
# GDScript - 音效管理器:使用 ResourcePreloader 预加载音效
extends Node
@onready var preloader: ResourcePreloader = $ResourcePreloader
func _ready():
# 查看所有预加载的资源名称
var resource_names = preloader.get_resource_list()
print("已预加载的资源: %s" % str(resource_names))
func play_sound(name: String):
# 从预加载器中获取音效资源
var sound = preloader.get_resource(name) as AudioStream
if sound:
var player = AudioStreamPlayer.new()
player.stream = sound
add_child(player)
player.play()