@@ -76,20 +76,17 @@ public void SetResourcePath(PathType pathType, string rootAssetBundle = "AssetBu
76
76
public T LoadAsset < T > ( string assetName ) where T : Object
77
77
{
78
78
assetName = assetName . ToLower ( ) ;
79
- //if (_allObjects.ContainsKey(assetName))
80
- // return (T)_allObjects[assetName];
81
79
82
80
AssetBundle assetBundle ;
83
81
if ( _allAssets . TryGetValue ( assetName , out assetBundle ) )
84
82
{
85
- //加载相关依赖
86
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetName ) ;
87
- foreach ( var item in dependencies )
88
- {
89
- AssetBundle . LoadFromFile ( _readPath + "/" + item ) ;
90
- }
83
+ //// 加载相关依赖
84
+ // string[] dependencies = _mainfest.GetAllDependencies(assetName);
85
+ // foreach (var item in dependencies)
86
+ // {
87
+ // AssetBundle.LoadFromFile(_readPath + "/" + item);
88
+ // }
91
89
T asset = assetBundle . LoadAsset < T > ( assetName ) ;
92
- // _allObjects.Add(assetName, asset);
93
90
return asset ;
94
91
}
95
92
return null ;
@@ -105,12 +102,12 @@ public void LoadAssetAsync<T>(string assetName, Action<string, UnityEngine.Objec
105
102
AssetBundle assetBundle ;
106
103
if ( _allAssets . TryGetValue ( assetName , out assetBundle ) )
107
104
{
108
- //加载相关依赖
109
- string [ ] dependencies = _mainfest . GetAllDependencies ( assetName ) ;
110
- foreach ( var item in dependencies )
111
- {
112
- AssetBundle . LoadFromFile ( _readPath + "/" + item ) ;
113
- }
105
+ //// 加载相关依赖
106
+ // string[] dependencies = _mainfest.GetAllDependencies(assetName);
107
+ // foreach (var item in dependencies)
108
+ // {
109
+ // AssetBundle.LoadFromFile(_readPath + "/" + item);
110
+ // }
114
111
AssetBundleRequest requetAsset = assetBundle . LoadAssetAsync < T > ( assetName ) ;
115
112
requetAsset . completed += ( asyncOperation ) => { asyncCallback . Invoke ( assetName , requetAsset . asset ) ; } ;
116
113
return ;
@@ -119,6 +116,28 @@ public void LoadAssetAsync<T>(string assetName, Action<string, UnityEngine.Objec
119
116
return ;
120
117
}
121
118
119
+ /// <summary>
120
+ /// 卸载掉资源
121
+ /// </summary>
122
+ /// <param name="assetName"></param>
123
+ /// <param name="allAssets"></param>
124
+ public void UnloadAsset ( string assetName , bool allAssets )
125
+ {
126
+ AssetBundle assetBundle ;
127
+ if ( _allAssets . TryGetValue ( assetName , out assetBundle ) )
128
+ {
129
+ if ( ! allAssets )
130
+ _allAssets . Remove ( assetName ) ;
131
+ else
132
+ {
133
+ foreach ( var item in assetBundle . GetAllAssetNames ( ) )
134
+ if ( _allAssets . ContainsKey ( item ) )
135
+ _allAssets . Remove ( item ) ;
136
+ }
137
+ //卸载资源
138
+ assetBundle . Unload ( allAssets ) ;
139
+ }
140
+ }
122
141
123
142
/// <summary>
124
143
/// 异步加载场景
@@ -129,12 +148,12 @@ public AsyncOperation LoadSceneAsync(string sceneName, LoadSceneMode mode = Load
129
148
AssetBundle assetBundle ;
130
149
if ( _allAssets . TryGetValue ( sceneName , out assetBundle ) )
131
150
{
132
- //加载相关依赖
133
- string [ ] dependencies = _mainfest . GetAllDependencies ( sceneName ) ;
134
- foreach ( var item in dependencies )
135
- {
136
- AssetBundle . LoadFromFile ( _readPath + "/" + item ) ;
137
- }
151
+ //// 加载相关依赖
152
+ // string[] dependencies = _mainfest.GetAllDependencies(sceneName);
153
+ // foreach (var item in dependencies)
154
+ // {
155
+ // AssetBundle.LoadFromFile(_readPath + "/" + item);
156
+ // }
138
157
return UnityEngine . SceneManagement . SceneManager . LoadSceneAsync ( sceneName , mode ) ;
139
158
}
140
159
return null ;
@@ -164,14 +183,14 @@ public void Clear()
164
183
}
165
184
166
185
#endregion
167
-
186
+
168
187
#region 内部函数
169
188
/// <summary>
170
- /// 加载mainfest
189
+ /// 加载mainfest -- LoadFromFile
171
190
/// </summary>
172
191
private void LoadPlatformMainfest ( string rootBundlePath , string folderPath )
173
192
{
174
- //string assetBundlePath = _readPath + "/AssetBundles";
193
+ //string assetBundlePath = _readPath + "/AssetBundles";
175
194
AssetBundle mainfestAssetBundle = AssetBundle . LoadFromFile ( rootBundlePath ) ;
176
195
_mainfest = mainfestAssetBundle . LoadAsset < AssetBundleManifest > ( "AssetBundleManifest" ) ; //
177
196
string [ ] assetBundleNames = _mainfest . GetAllAssetBundles ( ) ;
@@ -192,25 +211,26 @@ private void LoadPlatformMainfest(string rootBundlePath, string folderPath)
192
211
193
212
private void LoadPlatformMainfest ( string rootBundlePath , string folerPath , EnciphererKey keyAsset )
194
213
{
195
- //从内存中加载&解密
196
- //
197
- //DirectoryInfo dir = new DirectoryInfo(folerPath);
198
- //FileSystemInfo[] infos = dir.GetFileSystemInfos();
199
- //foreach (FileSystemInfo info in infos)
200
- //{
201
- // if (info is FileInfo)
202
- // {
203
- // if (info.Extension == "")
204
- // {
205
- // byte[] bs = File.ReadAllBytes(info.FullName);
206
- // byte[] cipbs = Encipherer.AESDecrypt(bs, keyAsset);
207
- // AssetBundle.LoadFromMemory
208
- // File.WriteAllBytes(info.FullName, cipbs);
209
- // Debug.Log("完成资源包 " + info.Name + " 的加密!" + System.DateTime.Now.ToString("HH:mm:ss:fff"));
210
- // }
211
- // }
212
- //}
213
- }
214
+ //从内存中加载&解密
215
+ byte [ ] datas = Encipherer . AESDecrypt ( File . ReadAllBytes ( rootBundlePath ) , keyAsset ) ;
216
+ AssetBundle mainfestAssetBundle = AssetBundle . LoadFromMemory ( datas ) ;
217
+ _mainfest = mainfestAssetBundle . LoadAsset < AssetBundleManifest > ( "AssetBundleManifest" ) ; //
218
+ string [ ] assetBundleNames = _mainfest . GetAllAssetBundles ( ) ;
219
+ foreach ( var item in assetBundleNames )
220
+ {
221
+ datas = Encipherer . AESDecrypt ( File . ReadAllBytes ( folerPath + "/" + item ) , keyAsset ) ;
222
+ AssetBundle assetBundle = AssetBundle . LoadFromMemory ( datas ) ;
223
+ string [ ] assetNames = assetBundle . GetAllAssetNames ( ) ;
224
+ if ( assetBundle . isStreamedSceneAssetBundle )
225
+ assetNames = assetBundle . GetAllScenePaths ( ) ;
226
+ foreach ( var name in assetNames )
227
+ {
228
+ if ( ! _allAssets . ContainsKey ( name ) )
229
+ _allAssets . Add ( name , assetBundle ) ;
230
+ }
231
+ }
232
+ mainfestAssetBundle . Unload ( false ) ;
233
+ }
214
234
215
235
#endregion
216
236
0 commit comments