Skip to content

Commit 2fce8a6

Browse files
committed
增加资源的异步加载
1 parent cbd4ba7 commit 2fce8a6

File tree

11 files changed

+213
-40
lines changed

11 files changed

+213
-40
lines changed

Assets/Game/Scripts/Resource/EditorResourceHelper.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99

1010
#if UNITY_EDITOR
1111

12+
using System;
1213
using System.Collections;
1314
using System.Collections.Generic;
1415
using UnityEngine;
1516
using UnityEditor;
1617
using UnityEngine.SceneManagement;
18+
using Object = UnityEngine.Object;
1719
using UnitySceneManager = UnityEngine.SceneManagement.SceneManager;
1820

1921
namespace GameFramework.Taurus
@@ -40,23 +42,9 @@ public T LoadAsset<T>(string assetName) where T : Object
4042
/// 异步加载资源
4143
/// </summary>
4244
/// <param name="assetName">资源名称</param>
43-
public AssetBundleRequest LoadAssetAsync<T>(string assetName) where T : Object
45+
public void LoadAssetAsync<T>(string assetName, Action<string, UnityEngine.Object> asyncCallback) where T : Object
4446
{
45-
//assetName = assetName.ToLower();
46-
//AssetBundle assetBundle;
47-
//if (_allAssets.TryGetValue(assetName, out assetBundle))
48-
//{
49-
// //加载相关依赖
50-
// string[] dependencies = _mainfest.GetAllDependencies(assetName);
51-
// foreach (var item in dependencies)
52-
// {
53-
// AssetBundle.LoadFromFile(_readPath + "/" + item);
54-
// }
55-
// AssetBundleRequest requetAsset = assetBundle.LoadAssetAsync<T>(assetName);
56-
// // _allObjects.Add(assetName, asset);
57-
// return requetAsset;
58-
//}
59-
return null;
47+
asyncCallback.Invoke(assetName,AssetDatabase.LoadAssetAtPath<T>(assetName));
6048
}
6149

6250
/// <summary>

Assets/Game/Scripts/State.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//-----------------------------------------------------------------------
2+
// <copyright>
3+
// Copyright (c) 2018 Zhang Yang. All rights reserved.
4+
// </copyright>
5+
// <describe> #检查资源状态# </describe>
6+
// <email> [email protected] </email>
7+
// <time> #2018年7月8日 13点20分# </time>
8+
9+
using System;
10+
using System.Collections;
11+
using System.Collections.Generic;
12+
using UnityEngine;
13+
14+
namespace GameFramework.Taurus
15+
{
16+
[GameState]
17+
public class CheckResourceState : GameState
18+
{
19+
public override void OnEnter(params object[] parameters)
20+
{
21+
base.OnEnter(parameters);
22+
}
23+
24+
25+
public override void OnExit()
26+
{
27+
base.OnExit();
28+
}
29+
30+
public override void OnFixedUpdate()
31+
{
32+
base.OnFixedUpdate();
33+
}
34+
35+
public override void OnInit()
36+
{
37+
base.OnInit();
38+
}
39+
40+
public override void OnUpdate()
41+
{
42+
base.OnUpdate();
43+
}
44+
}
45+
}

Assets/Game/Scripts/State/CheckResourceState.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.

Assets/GameFramework/Event/EventManager.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,26 +79,26 @@ public void Trigger<T>(object sender) where T : IEventArgs
7979
/// </summary>
8080
/// <param name="sender">触发事件的对象</param>
8181
/// <param name="value">事件参数</param>
82-
public void Trigger(object sender, IEventArgs value)
82+
public void Trigger(object sender, IEventArgs eventArgs)
8383
{
84-
HanleEvent(sender, value);
84+
HanleEvent(sender, eventArgs);
8585
}
8686

8787
#endregion
8888

8989

9090
#region 内部函数
9191
//处理事件
92-
private void HanleEvent(object sender, IEventArgs args)
92+
private void HanleEvent(object sender, IEventArgs eventArgs)
9393
{
94-
if (args == null)
94+
if (eventArgs == null)
9595
return;
9696
Action<object, IEventArgs> eventHandler = null;
97-
int Id = args.Id;
97+
int Id = eventArgs.Id;
9898
if (_allActions.TryGetValue(Id, out eventHandler))
9999
{
100100
if (eventHandler != null)
101-
eventHandler(sender, args);
101+
eventHandler(sender, eventArgs);
102102
}
103103
}
104104
//处理事件 不带参数

Assets/GameFramework/Resource/BundleResourceHelper .cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
// <time> #2018年6月24日 17点00分# </time>
88
//-----------------------------------------------------------------------
99

10+
using System;
1011
using System.Collections.Generic;
1112
using UnityEngine;
1213
using UnityEngine.SceneManagement;
14+
using Object = UnityEngine.Object;
1315

1416
namespace GameFramework.Taurus
1517
{
@@ -90,7 +92,7 @@ public T LoadAsset<T>(string assetName) where T : Object
9092
/// 异步加载资源
9193
/// </summary>
9294
/// <param name="assetName">资源名称</param>
93-
public AssetBundleRequest LoadAssetAsync<T>(string assetName) where T : Object
95+
public void LoadAssetAsync<T>(string assetName, Action<string, UnityEngine.Object> asyncCallback) where T : Object
9496
{
9597
assetName = assetName.ToLower();
9698
AssetBundle assetBundle;
@@ -103,10 +105,11 @@ public AssetBundleRequest LoadAssetAsync<T>(string assetName) where T : Object
103105
AssetBundle.LoadFromFile(_readPath + "/" + item);
104106
}
105107
AssetBundleRequest requetAsset = assetBundle.LoadAssetAsync<T>(assetName);
106-
// _allObjects.Add(assetName, asset);
107-
return requetAsset;
108+
requetAsset.completed += (asyncOperation) => { asyncCallback.Invoke(assetName, requetAsset.asset); };
109+
return;
108110
}
109-
return null;
111+
asyncCallback.Invoke(assetName, null);
112+
return;
110113
}
111114

112115

Assets/GameFramework/Resource/IResourceHelper.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// <time> #2018年6月22日 17点01分# </time>
88
//-----------------------------------------------------------------------
99

10+
using System;
1011
using UnityEngine;
1112
using UnityEngine.SceneManagement;
1213

@@ -28,11 +29,12 @@ public interface IResourceHelper
2829
/// <returns></returns>
2930
T LoadAsset<T>(string assetName) where T : UnityEngine.Object;
3031

31-
/// <summary>
32-
/// 异步加载资源
33-
/// </summary>
34-
/// <param name="assetName"></param>
35-
AssetBundleRequest LoadAssetAsync<T>(string assetName) where T : UnityEngine.Object;
32+
/// <summary>
33+
/// 异步加载资源
34+
/// </summary>
35+
/// <param name="assetName"></param>
36+
/// <param name="asyncCallback"></param>
37+
void LoadAssetAsync<T>(string assetName,Action<string,UnityEngine.Object> asyncCallback) where T : UnityEngine.Object;
3638

3739
/// <summary>
3840
/// 异步加载场景
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//-----------------------------------------------------------------------
2+
// <copyright>
3+
// Copyright (c) 2018 Zhang Yang. All rights reserved.
4+
// </copyright>
5+
// <describe> #资源加载事件# </describe>
6+
// <email> [email protected] </email>
7+
// <time> #2018年7月8日 13点43分# </time>
8+
//-----------------------------------------------------------------------
9+
10+
using System.Collections;
11+
using System.Collections.Generic;
12+
13+
namespace GameFramework.Taurus
14+
{
15+
public class ResourceEventArgs
16+
{
17+
}
18+
19+
/// <summary>
20+
/// 资源异步加载成功的事件
21+
/// </summary>
22+
public class ResourceLoadAsyncSuccessEventArgs : GameEventArgs<ResourceLoadAsyncSuccessEventArgs>
23+
{
24+
/// <summary>
25+
/// 异步加载成功的物体名称
26+
/// </summary>
27+
public string AssetName;
28+
/// <summary>
29+
/// 异步加载的物体
30+
/// </summary>
31+
public UnityEngine.Object Asset;
32+
}
33+
34+
/// <summary>
35+
/// 资源异步加载失败的事件
36+
/// </summary>
37+
public class ResourceLoadAsyncFailureEventArgs : GameEventArgs<ResourceLoadAsyncFailureEventArgs>
38+
{
39+
/// <summary>
40+
/// 异步加载物体名称
41+
/// </summary>
42+
public string AssetName;
43+
}
44+
45+
}

Assets/GameFramework/Resource/ResourceEventArgs.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.

Assets/GameFramework/Resource/ResourceManager.cs

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ public sealed class ResourceManager:GameFrameworkModule,IUpdate
2626
//GameObject对象池管理器
2727
private IGameObjectPoolHelper _gameObjectPoolHelper;
2828

29+
//资源异步加载完毕
30+
private ResourceLoadAsyncSuccessEventArgs _resLoadAsyncSuccessEventArgs;
31+
//资源异步加载失败
32+
private ResourceLoadAsyncFailureEventArgs _resLoadAsyncFailureEventArgs;
2933

30-
//场景加载中事件
31-
private SceneLoadingEventArgs _sceneLoadingEventArgs;
34+
//场景加载中事件
35+
private SceneLoadingEventArgs _sceneLoadingEventArgs;
3236
//场景加载完毕事件
3337
private SceneLoadedEventArgs _sceneLoadedEventArgs;
3438
//场景异步加载
@@ -44,8 +48,11 @@ public ResourceManager()
4448
//添加对象池管理器
4549
_gameObjectPoolHelper = new GameObject("GameObject_Pool").AddComponent<GameObjectPoolHelper>();
4650

47-
//场景事件
48-
_sceneLoadingEventArgs = new SceneLoadingEventArgs();
51+
//资源异步加载的事件
52+
_resLoadAsyncSuccessEventArgs = new ResourceLoadAsyncSuccessEventArgs();
53+
_resLoadAsyncFailureEventArgs = new ResourceLoadAsyncFailureEventArgs();
54+
//场景事件
55+
_sceneLoadingEventArgs = new SceneLoadingEventArgs();
4956
_sceneLoadedEventArgs = new SceneLoadedEventArgs();
5057
_sceneAsyncOperations = new Dictionary<string, AsyncOperation>();
5158
}
@@ -87,10 +94,17 @@ public T LoadAsset<T>(string assetName) where T : UnityEngine.Object
8794

8895
return _resourceHelper.LoadAsset<T>(assetName);
8996
}
90-
91-
92-
9397
/// <summary>
98+
/// 异步加载资源
99+
/// </summary>
100+
/// <typeparam name="T">资源的类型</typeparam>
101+
/// <param name="assetName">资源的名称</param>
102+
public void LoadAssetAsync<T>(string assetName) where T : UnityEngine.Object
103+
{
104+
_resourceHelper.LoadAssetAsync<T>(assetName, LoadAssetAsyncCallback);
105+
}
106+
107+
/// <summary>
94108
/// 异步加载场景
95109
/// </summary>
96110
/// <param name="sceneName"></param>
@@ -193,7 +207,6 @@ public void DespawnPrefab(string assetName)
193207

194208
#endregion
195209

196-
197210
#region 重写函数
198211

199212
public void OnUpdate()
@@ -231,6 +244,29 @@ public override void OnClose()
231244
}
232245
#endregion
233246

247+
248+
#region 内部函数
249+
//异步加载资源的回调
250+
private void LoadAssetAsyncCallback(string assetName,Object asset)
251+
{
252+
if (_event == null)
253+
return;
254+
255+
if (asset)
256+
{
257+
_resLoadAsyncSuccessEventArgs.AssetName = assetName;
258+
_resLoadAsyncSuccessEventArgs.Asset = asset;
259+
_event.Trigger(this, _resLoadAsyncSuccessEventArgs);
260+
}
261+
else
262+
{
263+
_resLoadAsyncFailureEventArgs.AssetName = assetName;
264+
_event.Trigger(this, _resLoadAsyncFailureEventArgs);
265+
}
266+
}
267+
268+
#endregion
269+
234270
}
235271

236272
#region 类型枚举

README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,31 @@ ChangeState<StartState>();
118118
```csharp
119119
TextAsset textAsset= GameFrameworkMode.GetModule<ResourceManager>().LoadAsset<TextAsset>("Assets/TextAssets/test.txt");
120120
```
121-
2. 资源异步加载(待添加)
121+
2. 资源异步加载
122+
* 添加资源异步加载的事件监听
123+
```csharp
124+
//资源异步加载成功
125+
GameFrameworkMode.GetModule<EventManager>().AddListener<ResourceLoadAsyncSuccessEventArgs>(OnResLoadSuccess);
126+
//资源异步加载失败
127+
GameFrameworkMode.GetModule<EventManager>().AddListener<ResourceLoadAsyncFailureEventArgs>(OnResLoadFailure);
128+
```
129+
* 添加事件监听的回调函数
130+
```csharp
131+
//资源异步加载失败回调
132+
private void OnResLoadFailure(object sender, IEventArgs e)
133+
{
134+
ResourceLoadAsyncFailureEventArgs ne = (ResourceLoadAsyncFailureEventArgs) e;
135+
}
136+
//资源异步加载成功回调
137+
private void OnResLoadSuccess(object sender, IEventArgs e)
138+
{
139+
ResourceLoadAsyncSuccessEventArgs ne = (ResourceLoadAsyncSuccessEventArgs)e;
140+
}
141+
```
142+
* 异步加载资源
143+
```csharp
144+
GameFrameworkMode.GetModule<ResourceManager>().LoadAssetAsync<TextAsset>("Assets/TextAssets/test.txt");
145+
```
122146
3. 内置对象池
123147
* 添加预设
124148
```csharp

0 commit comments

Comments
 (0)