@@ -103,18 +103,10 @@ public T LoadAsset<T>(string assetBundleName, string assetName) where T : Object
103
103
_allAssetBundles [ assetName ] = new KeyValuePair < AssetBundle , string [ ] > ( assetBundle , assetNames ) ;
104
104
}
105
105
106
- //加载相关依赖
107
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetBundleName ) ;
108
- List < AssetBundle > dependenciesAssetBundle = new List < AssetBundle > ( ) ;
109
- foreach ( var item in dependencies )
110
- {
111
- string assetBundlePath = Path . Combine ( _readPath , item ) ;
112
- dependenciesAssetBundle . Add ( LoadAssetBundle ( assetBundlePath ) ) ;
113
- }
114
- T asset = assetBundle . LoadAsset < T > ( assetName ) ;
115
- //卸载引用的assetbundle
116
- foreach ( var item in dependenciesAssetBundle )
117
- item . Unload ( false ) ;
106
+ //加载依赖项
107
+ LoadDependenciesAssetBundel ( assetBundleName ) ;
108
+ //加载资源
109
+ T asset = assetBundle . LoadAsset < T > ( assetName ) ;
118
110
119
111
return asset ;
120
112
}
@@ -153,23 +145,14 @@ public void LoadAssetAsync<T>(string assetBundleName,string assetName, Action<st
153
145
//存储assetbundle
154
146
_allAssetBundles [ assetName ] = new KeyValuePair < AssetBundle , string [ ] > ( assetBundle , assetNames ) ;
155
147
156
- //加载相关依赖 依赖暂时不异步加载了
157
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetBundleName ) ;
158
- List < AssetBundle > dependenciesAssetBundle = new List < AssetBundle > ( ) ;
159
- foreach ( var item in dependencies )
160
- {
161
- string dependenciesBundlePath = Path . Combine ( _readPath , item ) ;
162
- dependenciesAssetBundle . Add ( LoadAssetBundle ( dependenciesBundlePath ) ) ;
163
- }
148
+ //加载依赖项
149
+ LoadDependenciesAssetBundel ( assetBundleName ) ;
164
150
165
151
//assetbundle异步加载资源
166
152
AssetBundleRequest requetAsset = assetBundle . LoadAssetAsync < T > ( assetName ) ;
167
153
requetAsset . completed += ( asyncOperation ) =>
168
154
{
169
155
asyncCallback . Invoke ( assetName , requetAsset . asset ) ;
170
- //卸载引用的assetbundle
171
- foreach ( var item in dependenciesAssetBundle )
172
- item . Unload ( false ) ;
173
156
} ;
174
157
175
158
} ;
@@ -182,23 +165,14 @@ public void LoadAssetAsync<T>(string assetBundleName,string assetName, Action<st
182
165
}
183
166
else
184
167
{
185
- //加载相关依赖 依赖暂时不异步加载了
186
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetBundleName ) ;
187
- List < AssetBundle > dependenciesAssetBundle = new List < AssetBundle > ( ) ;
188
- foreach ( var item in dependencies )
189
- {
190
- string dependenciesBundlePath = Path . Combine ( _readPath , item ) ;
191
- dependenciesAssetBundle . Add ( LoadAssetBundle ( dependenciesBundlePath ) ) ;
192
- }
168
+ //加载依赖项
169
+ LoadDependenciesAssetBundel ( assetBundleName ) ;
193
170
194
171
//assetbundle异步加载资源
195
172
AssetBundleRequest requetAsset = assetBundle . LoadAssetAsync < T > ( assetName ) ;
196
173
requetAsset . completed += ( asyncOperation ) =>
197
174
{
198
175
asyncCallback . Invoke ( assetName , requetAsset . asset ) ;
199
- //卸载引用的assetbundle
200
- foreach ( var item in dependenciesAssetBundle )
201
- item . Unload ( false ) ;
202
176
} ;
203
177
}
204
178
}
@@ -242,21 +216,13 @@ public AsyncOperation LoadSceneAsync(string assetBundleName, string sceneName, L
242
216
createRequest . completed += ( operation ) =>
243
217
{
244
218
AssetBundle assetBundle = createRequest . assetBundle ;
245
- //加载相关依赖 依赖暂时不异步加载了
246
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetBundleName ) ;
247
- List < AssetBundle > dependenciesAssetBundle = new List < AssetBundle > ( ) ;
248
- foreach ( var item in dependencies )
249
- {
250
- string dependenciesBundlePath = Path . Combine ( _readPath , item ) ;
251
- dependenciesAssetBundle . Add ( LoadAssetBundle ( dependenciesBundlePath ) ) ;
252
- }
219
+ //加载依赖项
220
+ LoadDependenciesAssetBundel ( assetBundleName ) ;
253
221
254
- asyncOperation = SceneManager . LoadSceneAsync ( sceneName , mode ) ;
222
+ asyncOperation = SceneManager . LoadSceneAsync ( sceneName , mode ) ;
255
223
//场景加载完成卸载相关的引用
256
224
asyncOperation . completed += ( operation02 ) =>
257
225
{
258
- foreach ( var item in dependenciesAssetBundle )
259
- item . Unload ( false ) ;
260
226
assetBundle . Unload ( false ) ;
261
227
} ;
262
228
} ;
@@ -351,6 +317,33 @@ private AssetBundleCreateRequest LoadAssetBundleAsync(string path)
351
317
return assetBundleCreateRequest ;
352
318
}
353
319
320
+ //加载引用的assetbundle --引用的assetbundle不卸载
321
+ private void LoadDependenciesAssetBundel ( string assetBundleName )
322
+ {
323
+ //加载相关依赖 依赖暂时不异步加载了
324
+ string [ ] dependencies = _mainfest . GetAllDependencies ( assetBundleName ) ;
325
+ foreach ( var item in dependencies )
326
+ {
327
+ if ( _allAssetBundles . ContainsKey ( item ) )
328
+ continue ;
329
+
330
+ string dependenciesBundlePath = Path . Combine ( _readPath , item ) ;
331
+ AssetBundle assetBundle = LoadAssetBundle ( dependenciesBundlePath ) ;
332
+
333
+ //存储资源名称
334
+ string [ ] assetNames = assetBundle . GetAllAssetNames ( ) ;
335
+ if ( assetBundle . isStreamedSceneAssetBundle )
336
+ assetNames = assetBundle . GetAllScenePaths ( ) ;
337
+ foreach ( var name in assetNames )
338
+ {
339
+ if ( ! _allAssets . ContainsKey ( name ) )
340
+ _allAssets . Add ( name , assetBundle ) ;
341
+ }
342
+ //存储assetbundle
343
+ _allAssetBundles [ item ] = new KeyValuePair < AssetBundle , string [ ] > ( assetBundle , assetNames ) ;
344
+ }
345
+ }
346
+
354
347
#endregion
355
348
356
349
}
0 commit comments