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

Commit 91138a0

Browse files
committed
修改资源为async-await加载,其他有点小bug,先更新
2 parents b9f081a + 5d86019 commit 91138a0

File tree

617 files changed

+54807
-4335
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

617 files changed

+54807
-4335
lines changed

Assets/Game/HotFix/HotFix.dll.bytes

3.5 KB
Binary file not shown.

Assets/Game/Scene/Main.unity

Lines changed: 325 additions & 32 deletions
Large diffs are not rendered by default.

Assets/Game/Scripts/Resource/EditorResourceHelper.cs

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
using UnityEngine.SceneManagement;
1818
using Object = UnityEngine.Object;
1919
using UnitySceneManager = UnityEngine.SceneManagement.SceneManager;
20+
using System.Threading.Tasks;
21+
using UnityEditor.SceneManagement;
2022

2123
namespace GameFramework.Taurus
2224
{
@@ -32,42 +34,34 @@ public void SetResourcePath(PathType pathType, string rootAssetBundle = "AssetBu
3234
/// <typeparam name="T"></typeparam>
3335
/// <param name="assetName"></param>
3436
/// <returns></returns>
35-
public T LoadAsset<T>(string assetBundleName,string assetName) where T : Object
37+
public Task<T> LoadAsset<T>(string assetBundleName,string assetName) where T : Object
3638
{
37-
return AssetDatabase.LoadAssetAtPath<T>(assetName);
39+
TaskCompletionSource<T> task = new TaskCompletionSource<T>();
40+
task.SetResult(AssetDatabase.LoadAssetAtPath<T>(assetName));
41+
return task.Task;
3842
}
3943

40-
41-
/// <summary>
42-
/// 异步加载资源
43-
/// </summary>
44-
/// <param name="assetName">资源名称</param>
45-
public void LoadAssetAsync<T>(string assetBundleName,string assetName, Action<string, UnityEngine.Object> asyncCallback) where T : Object
46-
{
47-
asyncCallback.Invoke(assetName,AssetDatabase.LoadAssetAtPath<T>(assetName));
48-
}
49-
50-
/// <summary>
51-
/// 卸载资源 主要为卸载AssetBundle
52-
/// </summary>
53-
/// <param name="assetName">资源名称</param>
54-
/// <param name="allAssets">是否卸载调所有资源</param>
55-
public void UnloadAsset(string assetBundleName, bool unload)
44+
45+
/// <summary>
46+
/// 卸载资源 主要为卸载AssetBundle
47+
/// </summary>
48+
/// <param name="assetName">资源名称</param>
49+
/// <param name="allAssets">是否卸载调所有资源</param>
50+
public void UnloadAsset(string assetBundleName, bool unload)
5651
{
5752
}
5853

5954
/// <summary>
6055
/// 异步加载场景
6156
/// </summary>
6257
/// <param name="sceneName"></param>
63-
public AsyncOperation LoadSceneAsync(string assetBundleName,string sceneName, LoadSceneMode mode = LoadSceneMode.Additive)
58+
public Task<AsyncOperation> LoadSceneAsync(string assetBundleName,string sceneName, LoadSceneMode mode = LoadSceneMode.Additive)
6459
{
65-
if (mode == LoadSceneMode.Additive)
66-
return EditorApplication.LoadLevelAdditiveAsyncInPlayMode(sceneName);
67-
else
68-
return EditorApplication.LoadLevelAsyncInPlayMode(sceneName);
69-
// return UnitySceneManager.LoadSceneAsync(sceneName, mode);
70-
}
60+
TaskCompletionSource<AsyncOperation> task = new TaskCompletionSource<AsyncOperation>();
61+
task.SetResult(EditorSceneManager.LoadSceneAsyncInPlayMode(sceneName, new LoadSceneParameters(mode)));
62+
return task.Task;
63+
// return UnitySceneManager.LoadSceneAsync(sceneName, mode);
64+
}
7165

7266
/// <summary>
7367
/// 卸载场景
@@ -84,7 +78,17 @@ public AsyncOperation UnloadSceneAsync(string sceneName)
8478
public void Clear()
8579
{
8680
}
87-
}
81+
82+
public Task<AssetBundle> LoadAssetBundle(string assetBundleName)
83+
{
84+
return null;
85+
}
86+
87+
public T LoadAssetSync<T>(string assetBundleName, string assetName) where T : Object
88+
{
89+
return AssetDatabase.LoadAssetAtPath<T>(assetName);
90+
}
91+
}
8892
}
8993

9094
#endif

Assets/Game/Scripts/State/LoadHotfixState.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ public override void OnUpdate()
5151

5252
#region 内部函数
5353

54-
private void LoadHotFix()
54+
private async void LoadHotFix()
5555
{
56-
byte[] dllDatas = GameMode.Resource.LoadAsset<TextAsset>("hotfix",_dllPath).bytes;
56+
byte[] dllDatas =(await GameMode.Resource.LoadAsset<TextAsset>("hotfix",_dllPath)).bytes;
5757
byte[] pdbDatas = null;
5858
#if UNITY_EDITOR
5959
//pdbDatas = GameMode.Resource.LoadAsset<TextAsset>("hotfix", _pdbPath)?.bytes;

Assets/Game/Scripts/State/LoadResourceState.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public override void OnEnter(params object[] parameters)
2929
GameMode.Resource.SetResourceHelper(new BundleResourceHelper());
3030
//加载ab包的mainfest文件
3131
GameMode.Resource.SetMainfestAssetBundle(versionInfo.ManifestAssetBundle, versionInfo.IsEncrypt);
32+
33+
//切换到预加载的状态
34+
ChangeState<PreloadState>();
3235
}
3336

3437
public override void OnExit()

Assets/Game/Scripts/State/PreloadState.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//-----------------------------------------------------------------------
99
using System.Collections;
1010
using System.Collections.Generic;
11+
using UnityEngine;
1112

1213
namespace GameFramework.Taurus
1314
{
@@ -18,7 +19,7 @@ public class PreloadState : GameState
1819
public override void OnEnter(params object[] parameters)
1920
{
2021
base.OnEnter(parameters);
21-
22+
2223
//测试 直接切换到热更新状态里面去
2324
ChangeState<LoadHotfixState>();
2425
}

Assets/GameFramework/Audio/AudioManager.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
using System.Collections;
1111
using System.Collections.Generic;
12+
using System.Threading.Tasks;
1213
using UnityEngine;
1314

1415
namespace GameFramework.Taurus
@@ -79,15 +80,15 @@ public void AddSoundEffect(string assetBundleName,string audioClipPath)
7980
/// 播放在GameObject上的声音
8081
/// </summary>
8182
/// <param name="audioClipPath"></param>
82-
public void PlayGameObjectSound(GameObject go,string assetBundleName,string audioClipPath)
83+
public async void PlayGameObjectSound(GameObject go,string assetBundleName,string audioClipPath)
8384
{
8485
AudioSource audioSource=go.GetComponent<AudioSource>();
8586
if (audioSource==null)
8687
{
8788
audioSource = go.AddComponent<AudioSource>();
8889
}
8990

90-
audioSource.clip = _resourceManager?.LoadAsset<AudioClip>(assetBundleName,audioClipPath);
91+
audioSource.clip = await _resourceManager?.LoadAsset<AudioClip>(assetBundleName,audioClipPath);
9192
if (audioSource.clip != null)
9293
audioSource.Play();
9394
}
@@ -190,11 +191,11 @@ public void RemoveSoundEffect(string audioClipPath)
190191
#region 内部函数
191192

192193
//添加音频
193-
private bool AddAuioClip(string assetBundleName,string audioClipPath, Dictionary<string, AudioClip> clips)
194+
private async Task<bool> AddAuioClip(string assetBundleName,string audioClipPath, Dictionary<string, AudioClip> clips)
194195
{
195196
if (!clips.ContainsKey(audioClipPath))
196197
{
197-
AudioClip audioClip = _resourceManager?.LoadAsset<AudioClip>(assetBundleName,audioClipPath);
198+
AudioClip audioClip = await _resourceManager?.LoadAsset<AudioClip>(assetBundleName,audioClipPath);
198199
if (audioClip != null)
199200
{
200201
clips.Add(audioClipPath, audioClip);

Assets/GameFramework/DataTable/DataTableManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public DataTableManager()
3030
/// <typeparam name="T"></typeparam>
3131
/// <param name="data">配置表的数据</param>
3232
/// <returns></returns>
33-
public void LoadDataTable<T>(string assetBundleName,string dataTablePath) where T :class, IDataTableRow,new()
33+
public async void LoadDataTable<T>(string assetBundleName,string dataTablePath) where T :class, IDataTableRow,new()
3434
{
35-
string data= _resource.LoadAsset<TextAsset>(assetBundleName,dataTablePath).text;
35+
string data= (await _resource.LoadAsset<TextAsset>(assetBundleName,dataTablePath)).text;
3636
DataTable<T> dataTable = new DataTable<T>();
3737
string[] rows = data.Split('\n');
3838
foreach (var item in rows)

Assets/GameFramework/Editor/AssetBundleEditor/AssetBundleBuildEditor.cs

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ public static void BuildAssetBundles()
5757

5858
//保存平台信息
5959
SavePlatformVersion(new List<BuildTarget>(){target});
60-
}
60+
61+
//复制资源
62+
CopyResource(target);
63+
AssetDatabase.Refresh();
64+
65+
}
6166

6267
[MenuItem("Tools/Build AssetBundles Targets %#Y")]
6368
public static void BuildAssetBundlesAllTargets()
@@ -74,7 +79,13 @@ public static void BuildAssetBundlesAllTargets()
7479

7580
//保存平台信息
7681
SavePlatformVersion(targets);
77-
}
82+
if (targets.Contains(EditorUserBuildSettings.activeBuildTarget))
83+
{
84+
//复制资源
85+
CopyResource(EditorUserBuildSettings.activeBuildTarget);
86+
AssetDatabase.Refresh();
87+
}
88+
}
7889

7990
/// <summary>
8091
/// OnGUI is called for rendering and handling GUI events.
@@ -103,7 +114,7 @@ void OnGUI()
103114
GUILayout.Label("Compression:");
104115
_config.CompressOptions = EditorGUILayout.Popup(_config.CompressOptions,_compressionOptionsContent);
105116
GUILayout.EndHorizontal();
106-
117+
107118
GUILayout.BeginHorizontal("Box");
108119
GUILayout.Label("BuildPath:");
109120
GUILayout.TextArea(string.IsNullOrEmpty(_config.BuildPath)?_rootPath:_config.BuildPath);
@@ -129,9 +140,15 @@ void OnGUI()
129140
return;
130141
}
131142
GUILayout.EndHorizontal();
132-
133-
//build targets----------------------------------------------------------------------------
134-
GUILayout.BeginVertical("Box");
143+
144+
//copy------------------------------------
145+
GUILayout.BeginHorizontal("Box");
146+
GUILayout.FlexibleSpace();
147+
_config.Copy2StreamingAssets= GUILayout.Toggle(_config.Copy2StreamingAssets, "Copy to StreamingAssets");
148+
GUILayout.EndHorizontal();
149+
150+
//build targets----------------------------------------------------------------------------
151+
GUILayout.BeginVertical("Box");
135152
GUILayout.Label("Build Targets:");
136153
_scrollViewPos=GUILayout.BeginScrollView(_scrollViewPos,"Box");
137154
foreach (var item in _allTargets)
@@ -269,15 +286,30 @@ private static void SavePlatformVersion(List<BuildTarget> targets)
269286
EditorUtility.OpenWithDefaultApp(_config.BuildPath);
270287
}
271288

289+
//复制资源
290+
private static void CopyResource(BuildTarget target)
291+
{
292+
//打包路径
293+
string buildPath =Path.GetFullPath( Path.Combine(_config.BuildPath, target.ToString()));
294+
//获取源文件夹下的所有文件 不考虑子文件夹
295+
string[] files = Directory.GetFiles(buildPath);
296+
string targetPath = Path.GetFullPath(Application.streamingAssetsPath);
297+
for (int i = 0; i < files.Length; i++)
298+
{
299+
string path = files[i].Replace(buildPath, targetPath);
300+
File.Copy(files[i], path, true);
301+
}
302+
}
303+
272304
//ab包的配置文件信息
273305
[System.Serializable]
274306
public class AssetBundleConifgInfo
275307
{
276308
public int Version=0;
277309
public string BuildPath="";
278310
public int CompressOptions=1;
311+
public bool Copy2StreamingAssets = false;
279312
public List<int> BuildTargets=new List<int>();
280-
281313
}
282314

283315

0 commit comments

Comments
 (0)