Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit 00d659f

Browse files
committed
依赖ab包为优化多会重复调用,不主动卸载
1 parent 7de077c commit 00d659f

File tree

1 file changed

+38
-45
lines changed

1 file changed

+38
-45
lines changed

Assets/GameFramework/Resource/BundleResourceHelper.cs

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,10 @@ public T LoadAsset<T>(string assetBundleName, string assetName) where T : Object
103103
_allAssetBundles[assetName] = new KeyValuePair<AssetBundle, string[]>(assetBundle, assetNames);
104104
}
105105

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);
118110

119111
return asset;
120112
}
@@ -153,23 +145,14 @@ public void LoadAssetAsync<T>(string assetBundleName,string assetName, Action<st
153145
//存储assetbundle
154146
_allAssetBundles[assetName] = new KeyValuePair<AssetBundle, string[]>(assetBundle, assetNames);
155147

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);
164150

165151
//assetbundle异步加载资源
166152
AssetBundleRequest requetAsset = assetBundle.LoadAssetAsync<T>(assetName);
167153
requetAsset.completed += (asyncOperation) =>
168154
{
169155
asyncCallback.Invoke(assetName, requetAsset.asset);
170-
//卸载引用的assetbundle
171-
foreach (var item in dependenciesAssetBundle)
172-
item.Unload(false);
173156
};
174157

175158
};
@@ -182,23 +165,14 @@ public void LoadAssetAsync<T>(string assetBundleName,string assetName, Action<st
182165
}
183166
else
184167
{
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);
193170

194171
//assetbundle异步加载资源
195172
AssetBundleRequest requetAsset = assetBundle.LoadAssetAsync<T>(assetName);
196173
requetAsset.completed += (asyncOperation) =>
197174
{
198175
asyncCallback.Invoke(assetName, requetAsset.asset);
199-
//卸载引用的assetbundle
200-
foreach (var item in dependenciesAssetBundle)
201-
item.Unload(false);
202176
};
203177
}
204178
}
@@ -242,21 +216,13 @@ public AsyncOperation LoadSceneAsync(string assetBundleName, string sceneName, L
242216
createRequest.completed += (operation) =>
243217
{
244218
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);
253221

254-
asyncOperation= SceneManager.LoadSceneAsync(sceneName, mode);
222+
asyncOperation = SceneManager.LoadSceneAsync(sceneName, mode);
255223
//场景加载完成卸载相关的引用
256224
asyncOperation.completed += (operation02) =>
257225
{
258-
foreach (var item in dependenciesAssetBundle)
259-
item.Unload(false);
260226
assetBundle.Unload(false);
261227
};
262228
};
@@ -351,6 +317,33 @@ private AssetBundleCreateRequest LoadAssetBundleAsync(string path)
351317
return assetBundleCreateRequest;
352318
}
353319

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+
354347
#endregion
355348

356349
}

0 commit comments

Comments
 (0)