Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit 8c64545

Browse files
增加Addressables的接口
1 parent 943e2ab commit 8c64545

File tree

8 files changed

+372
-35
lines changed

8 files changed

+372
-35
lines changed
Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
1-
{
2-
"name": "GameFramework",
3-
"references": [
4-
"GUID:87b7f08973070ad4cbd7876379f056f5",
5-
"GUID:560b04d1a97f54a4e82edc0cbbb69285",
6-
"GUID:f51ebe6a0ceec4240a699833d6309b23",
7-
"GUID:593a5b492d29ac6448b1ebf7f035ef33",
8-
"GUID:029c1c1b674aaae47a6841a0b89ad80e",
9-
"GUID:5c01796d064528144a599661eaab93a6",
10-
"GUID:dc47925d1a5fa2946bdd37746b2b5d48",
11-
"GUID:c5ad09bc097de581534da01d88ffaf38"
12-
],
13-
"includePlatforms": [],
14-
"excludePlatforms": [],
15-
"allowUnsafeCode": true,
16-
"overrideReferences": false,
17-
"precompiledReferences": [
18-
""
19-
],
20-
"autoReferenced": true,
21-
"defineConstraints": [],
22-
"versionDefines": [],
23-
"noEngineReferences": false
1+
{
2+
"name": "GameFramework",
3+
"rootNamespace": "",
4+
"references": [
5+
"GUID:87b7f08973070ad4cbd7876379f056f5",
6+
"GUID:560b04d1a97f54a4e82edc0cbbb69285",
7+
"GUID:f51ebe6a0ceec4240a699833d6309b23",
8+
"GUID:593a5b492d29ac6448b1ebf7f035ef33",
9+
"GUID:029c1c1b674aaae47a6841a0b89ad80e",
10+
"GUID:5c01796d064528144a599661eaab93a6",
11+
"GUID:dc47925d1a5fa2946bdd37746b2b5d48",
12+
"GUID:c5ad09bc097de581534da01d88ffaf38",
13+
"GUID:9e24947de15b9834991c9d8411ea37cf",
14+
"GUID:84651a3751eca9349aac36a66bba901b"
15+
],
16+
"includePlatforms": [],
17+
"excludePlatforms": [],
18+
"allowUnsafeCode": true,
19+
"overrideReferences": false,
20+
"precompiledReferences": [
21+
""
22+
],
23+
"autoReferenced": true,
24+
"defineConstraints": [],
25+
"versionDefines": [],
26+
"noEngineReferences": false
2427
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using UnityEngine;
5+
using UnityEngine.AddressableAssets;
6+
using UnityEngine.ResourceManagement.AsyncOperations;
7+
using UnityEngine.ResourceManagement.ResourceProviders;
8+
using UnityEngine.SceneManagement;
9+
10+
namespace Wanderer.GameFramework
11+
{
12+
public class AddressablesAssetsHelper : IAssetsHelper
13+
{
14+
15+
private Dictionary<string, AsyncOperationHandle<SceneInstance>> _sceneInstanceAsync = new Dictionary<string, AsyncOperationHandle<SceneInstance>>();
16+
private Dictionary<string, UnityEngine.Object> _objectAsync = new Dictionary<string, UnityEngine.Object>();
17+
18+
public List<string> AllAssetPaths => null;
19+
20+
public void Clear()
21+
{
22+
foreach (var item in _objectAsync)
23+
{
24+
Addressables.Release(item.Value);
25+
}
26+
_objectAsync.Clear();
27+
28+
foreach (var item in _sceneInstanceAsync)
29+
{
30+
Addressables.UnloadSceneAsync(item.Value);
31+
}
32+
_sceneInstanceAsync.Clear();
33+
}
34+
35+
public void LoadAsset<T>(string assetName, Action<T> callback) where T : UnityEngine.Object
36+
{
37+
Addressables.LoadAssetAsync<T>(assetName).Completed += (handle)=> {
38+
var @object = handle.Result;
39+
CheckAsset(assetName, @object);
40+
callback?.Invoke(@object);
41+
};
42+
}
43+
44+
public T LoadAsset<T>(string assetName) where T : UnityEngine.Object
45+
{
46+
var handle = Addressables.LoadAssetAsync<T>(assetName);
47+
var @object = handle.WaitForCompletion();
48+
CheckAsset(assetName, @object);
49+
return @object;
50+
}
51+
52+
53+
public T[] FindAssets<T>(List<string> tags) where T : UnityEngine.Object
54+
{
55+
var handle= Addressables.LoadAssetsAsync<T>(tags, (tObject) =>
56+
{
57+
},Addressables.MergeMode.Intersection);
58+
59+
var resultList= handle.WaitForCompletion();
60+
T[] result = new T[resultList.Count];
61+
resultList.CopyTo(result,0);
62+
return result;
63+
}
64+
65+
public void FindAssets<T>(List<string> tags, Action<T[]> callback) where T : UnityEngine.Object
66+
{
67+
var handle = Addressables.LoadAssetsAsync<T>(tags, (tObject) =>
68+
{
69+
}, Addressables.MergeMode.Intersection);
70+
71+
handle.Completed += (resultHandle) => {
72+
var resultList = resultHandle.Result;
73+
T[] result = new T[resultList.Count];
74+
resultList.CopyTo(result, 0);
75+
callback?.Invoke(result);
76+
};
77+
}
78+
79+
public void LoadSceneAsync(string sceneName, LoadSceneMode mode, Action<AsyncOperation> callback)
80+
{
81+
if (!_sceneInstanceAsync.ContainsKey(sceneName))
82+
{
83+
var handle = Addressables.LoadSceneAsync(sceneName, mode);
84+
_sceneInstanceAsync.Add(sceneName,handle);
85+
handle.Completed += (sceneHandle) => { callback?.Invoke(sceneHandle.Result.ActivateAsync()); };
86+
}
87+
}
88+
89+
public void Preload(Action<float> progressCallback)
90+
{
91+
progressCallback?.Invoke(1.0f);
92+
}
93+
94+
public void SetResource(Action callback)
95+
{
96+
callback?.Invoke();
97+
}
98+
99+
public void UnloadAsset(string assetName)
100+
{
101+
if (_objectAsync.ContainsKey(assetName))
102+
{
103+
var @object = _objectAsync[assetName];
104+
_objectAsync.Remove(assetName);
105+
Addressables.Release(@object);
106+
}
107+
}
108+
109+
public void UnloadAssetBunlde(string assetBundleName, bool unload = false)
110+
{
111+
}
112+
113+
public AsyncOperation UnloadSceneAsync(string sceneName)
114+
{
115+
if (_sceneInstanceAsync.ContainsKey(sceneName))
116+
{
117+
var handle = _sceneInstanceAsync[sceneName];
118+
_sceneInstanceAsync.Remove(sceneName);
119+
var unloadHandle = Addressables.UnloadSceneAsync(handle);
120+
return unloadHandle.Result.ActivateAsync();
121+
}
122+
return null;
123+
}
124+
125+
private void CheckAsset(string assetName, UnityEngine.Object @object)
126+
{
127+
if (!_objectAsync.ContainsKey(assetName))
128+
{
129+
_objectAsync.Add(assetName, @object);
130+
}
131+
else
132+
{
133+
Log.Warning($"The same resource file was loaded earlier : {assetName}");
134+
}
135+
}
136+
}
137+
}

‎GameFramework/Runtime/Resource/AddressablesAssetsHelper.cs.meta‎

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎GameFramework/Runtime/Resource/BundleAssetsHelper.cs‎

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,86 @@ public T LoadAsset<T>(string assetName) where T : UnityEngine.Object
172172
}
173173

174174
}
175-
175+
176+
public T[] FindAssets<T>(List<string> tags) where T : UnityEngine.Object
177+
{
178+
HashSet<string> lowerTags = new HashSet<string>();
179+
foreach (var item in tags)
180+
{
181+
lowerTags.Add(item.ToLower());
182+
}
183+
184+
List<string> matchPaths = new List<string>();
185+
foreach (var item in _allAssetPaths)
186+
{
187+
bool contains = true;
188+
foreach (var tag in lowerTags)
189+
{
190+
contains = item.Contains(tag);
191+
if (!contains)
192+
break;
193+
}
194+
if (contains)
195+
{
196+
matchPaths.Add(item);
197+
}
198+
}
199+
200+
List<T> result = new List<T>();
201+
foreach (var item in matchPaths)
202+
{
203+
T asset = LoadAsset<T>(item);
204+
if (asset != null)
205+
{
206+
result.Add(asset);
207+
}
208+
}
209+
210+
return result.ToArray();
211+
}
212+
213+
public void FindAssets<T>(List<string> tags, Action<T[]> callback) where T : UnityEngine.Object
214+
{
215+
HashSet<string> lowerTags = new HashSet<string>();
216+
foreach (var item in tags)
217+
{
218+
lowerTags.Add(item.ToLower());
219+
}
220+
221+
List<string> matchPaths = new List<string>();
222+
foreach (var item in _allAssetPaths)
223+
{
224+
bool contains = true;
225+
foreach (var tag in lowerTags)
226+
{
227+
contains = item.Contains(tag);
228+
if (!contains)
229+
break;
230+
}
231+
if (contains)
232+
{
233+
matchPaths.Add(item);
234+
}
235+
}
236+
237+
List<T> result = new List<T>();
238+
int resultCount = 0;
239+
foreach (var item in matchPaths)
240+
{
241+
LoadAsset<T>(item,(asset)=> {
242+
resultCount++;
243+
if (asset != null)
244+
{
245+
result.Add(asset);
246+
}
247+
if (resultCount >= matchPaths.Count)
248+
{
249+
callback?.Invoke(result.ToArray());
250+
}
251+
});
252+
}
253+
}
254+
176255
/// <summary>
177256
/// 卸载资源
178257
/// </summary>

‎GameFramework/Runtime/Resource/EditorAssetsHelper.cs‎

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,88 @@ public T LoadAsset<T>(string assetName) where T : Object
8282
return AssetDatabase.LoadAssetAtPath<T>(assetName);
8383
}
8484

85-
public void Preload(Action<float> progressCallback)
85+
86+
public T[] FindAssets<T>(List<string> tags) where T : UnityEngine.Object
87+
{
88+
HashSet<string> lowerTags = new HashSet<string>();
89+
foreach (var item in tags)
90+
{
91+
lowerTags.Add(item.ToLower());
92+
}
93+
94+
List<string> matchPaths = new List<string>();
95+
foreach (var item in _allAssetPaths)
96+
{
97+
bool contains = true;
98+
foreach (var tag in lowerTags)
99+
{
100+
contains = item.Contains(tag);
101+
if (!contains)
102+
break;
103+
}
104+
if (contains)
105+
{
106+
matchPaths.Add(item);
107+
}
108+
}
109+
110+
List<T> result = new List<T>();
111+
foreach (var item in matchPaths)
112+
{
113+
T asset = LoadAsset<T>(item);
114+
if (asset != null)
115+
{
116+
result.Add(asset);
117+
}
118+
}
119+
120+
return result.ToArray();
121+
}
122+
123+
public void FindAssets<T>(List<string> tags, Action<T[]> callback) where T : UnityEngine.Object
124+
{
125+
HashSet<string> lowerTags = new HashSet<string>();
126+
foreach (var item in tags)
127+
{
128+
lowerTags.Add(item.ToLower());
129+
}
130+
131+
List<string> matchPaths = new List<string>();
132+
foreach (var item in _allAssetPaths)
133+
{
134+
bool contains = true;
135+
foreach (var tag in lowerTags)
136+
{
137+
contains = item.Contains(tag);
138+
if (!contains)
139+
break;
140+
}
141+
if (contains)
142+
{
143+
matchPaths.Add(item);
144+
}
145+
}
146+
147+
List<T> result = new List<T>();
148+
int resultCount = 0;
149+
foreach (var item in matchPaths)
150+
{
151+
LoadAsset<T>(item, (asset) => {
152+
resultCount++;
153+
if (asset != null)
154+
{
155+
result.Add(asset);
156+
}
157+
if (resultCount >= matchPaths.Count)
158+
{
159+
callback?.Invoke(result.ToArray());
160+
}
161+
});
162+
}
163+
}
164+
165+
166+
public void Preload(Action<float> progressCallback)
86167
{
87168
progressCallback?.Invoke(1.0f);
88169
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /