yyl
2026-02-11 3f2cd27c5dfb3b450245bf1a37fc1b3414031c7c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// ============================================================================
// IResourcePreloader.cs — 资源预加载服务接口
// Feature: 001-async-resource-loading
// ============================================================================
 
using System;
using Cysharp.Threading.Tasks;
 
namespace ProjSG.Resource
{
    /// <summary>
    /// 资源预加载服务接口。
    /// 按场景/流程组织批量资源预加载。
    /// </summary>
    public interface IResourcePreloader
    {
        /// <summary>
        /// 注册预加载配置。
        /// </summary>
        void RegisterConfig(PreloadConfig config);
 
        /// <summary>
        /// 执行指定预加载配置。
        /// </summary>
        UniTask PreloadAsync(string configName, IProgress<float> progress = null);
 
        /// <summary>
        /// 按资源标签批量预加载。
        /// </summary>
        UniTask PreloadByTagAsync(string tag, IProgress<float> progress = null);
 
        /// <summary>
        /// 卸载指定配置的资源(常驻配置不卸载)。
        /// </summary>
        void UnloadConfig(string configName);
 
        /// <summary>
        /// 检查配置是否已预加载完成。
        /// </summary>
        bool IsConfigLoaded(string configName);
    }
 
    /// <summary>
    /// 预加载配置数据。
    /// </summary>
    public class PreloadConfig
    {
        /// <summary>配置名称</summary>
        public string ConfigName { get; set; }
 
        /// <summary>需要预加载的资源地址列表</summary>
        public string[] Locations { get; set; }
 
        /// <summary>需要预加载的资源标签列表</summary>
        public string[] Tags { get; set; }
 
        /// <summary>是否为常驻资源(不允许卸载)</summary>
        public bool IsPermanent { get; set; }
    }
}