yyl
2026-05-11 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// ============================================================================
// IYooAssetService.cs — YooAsset 资源加载服务接口
// 定义在 Main 程序集中,供所有业务系统使用
// ============================================================================
 
using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
 
namespace ProjSG.Resource
{
    /// <summary>
    /// YooAsset 资源加载服务接口。
    /// 封装 YooAsset ResourcePackage 的核心加载能力,提供 UniTask 异步 API。
    /// </summary>
    public interface IYooAssetService
    {
        /// <summary>
        /// 服务是否已初始化完成
        /// </summary>
        bool IsInitialized { get; }
 
        /// <summary>
        /// 当前运行模式
        /// </summary>
        EPlayMode PlayMode { get; }
 
        // ====================================================================
        // 初始化
        // ====================================================================
 
        /// <summary>
        /// 初始化 YooAsset 资源服务。
        /// 在 Launch 阶段由 YooAssetInitializer 调用。
        /// </summary>
        /// <param name="playMode">运行模式</param>
        /// <param name="remoteServices">CDN 远程服务(HostPlayMode/WebPlayMode 必需)</param>
        /// <returns>初始化完成</returns>
        UniTask InitializeAsync(EPlayMode playMode, IRemoteServices remoteServices = null);
 
        // ====================================================================
        // 资源加载 — Asset
        // ====================================================================
 
        /// <summary>
        /// 异步加载指定类型的资源。
        /// </summary>
        /// <typeparam name="T">资源类型(GameObject, Sprite, AudioClip 等)</typeparam>
        /// <param name="location">YooAsset 资源地址</param>
        /// <param name="priority">加载优先级(0 = 默认)</param>
        /// <param name="ct">取消令牌</param>
        /// <returns>加载完成的资源对象,加载失败返回 null</returns>
        UniTask<T> LoadAssetAsync<T>(string location, uint priority = 0,
            CancellationToken ct = default) where T : UnityEngine.Object;
 
        /// <summary>
        /// 异步加载指定类型的资源(Type 参数版本)。
        /// </summary>
        UniTask<UnityEngine.Object> LoadAssetAsync(string location, Type type, uint priority = 0,
            CancellationToken ct = default);
 
        /// <summary>
        /// 异步加载子资源(如 SpriteAtlas 中的 Sprite)。
        /// </summary>
        UniTask<SubAssetsHandle> LoadSubAssetsAsync<T>(string location, uint priority = 0,
            CancellationToken ct = default) where T : UnityEngine.Object;
 
        /// <summary>
        /// 异步加载同一 Bundle 下的所有同类型资源。
        /// </summary>
        UniTask<AllAssetsHandle> LoadAllAssetsAsync<T>(string location, uint priority = 0,
            CancellationToken ct = default) where T : UnityEngine.Object;
 
        // ====================================================================
        // 资源加载 — RawFile
        // ====================================================================
 
        /// <summary>
        /// 异步加载原始文件并返回文本内容。
        /// 用于配置文件(.txt, .json, .csv 等)加载。
        /// </summary>
        UniTask<string> LoadRawFileTextAsync(string location, CancellationToken ct = default);
 
        /// <summary>
        /// 异步加载原始文件并返回字节数组。
        /// </summary>
        UniTask<byte[]> LoadRawFileBytesAsync(string location, CancellationToken ct = default);
 
        // ====================================================================
        // 场景加载
        // ====================================================================
 
        /// <summary>
        /// 异步加载场景。
        /// </summary>
        UniTask<SceneHandle> LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single,
            LocalPhysicsMode physicsMode = LocalPhysicsMode.None, bool suspendLoad = false, uint priority = 0, CancellationToken ct = default);
 
        // ====================================================================
        // 资源信息查询
        // ====================================================================
 
        /// <summary>
        /// 检查资源地址是否有效。
        /// </summary>
        bool CheckLocationValid(string location);
 
        /// <summary>
        /// 获取指定标签的所有资源信息。
        /// </summary>
        YooAsset.AssetInfo[] GetAssetInfosByTag(string tag);
 
        /// <summary>
        /// 检查资源是否需要从远程下载。
        /// </summary>
        bool IsNeedDownloadFromRemote(string location);
 
        // ====================================================================
        // 资源下载
        // ====================================================================
 
        /// <summary>
        /// 创建资源下载器并开始下载。
        /// </summary>
        UniTask DownloadByTagsAsync(string[] tags, int downloadingMaxNumber = 10,
            int failedTryAgain = 3, IProgress<float> progress = null, CancellationToken ct = default);
 
        // ====================================================================
        // 版本管理
        // ====================================================================
 
        /// <summary>
        /// 请求最新包裹版本。
        /// </summary>
        UniTask<string> RequestPackageVersionAsync(CancellationToken ct = default);
 
        /// <summary>
        /// 更新包裹 Manifest 到指定版本。
        /// </summary>
        UniTask UpdatePackageManifestAsync(string packageVersion, CancellationToken ct = default);
 
        // ====================================================================
        // 资源释放
        // ====================================================================
 
        /// <summary>
        /// 释放资源句柄(引用计数 -1)。
        /// </summary>
        void ReleaseHandle(HandleBase handle);
 
        /// <summary>
        /// 卸载所有引用计数为零的资源。
        /// </summary>
        UniTask UnloadUnusedAssetsAsync();
 
        /// <summary>
        /// 强制卸载所有资源。
        /// </summary>
        UniTask UnloadAllAssetsAsync();
    }
}