YooAsset/Docs/YooAssetLoader.md

121 lines
2.8 KiB
Markdown
Raw Normal View History

2022-03-03 18:08:32 +08:00
# 资源加载
在加载资源对象的时候只需要提供相对路径统一约定该相对路径名称为location
资源加载接口:
- YooAssets.LoadAssetSync() 同步加载资源对象接口
- YooAssets.LoadSubAssetsSync() 同步加载子资源对象接口
- YooAssets.LoadAssetAsync() 异步加载资源对象接口
- YooAssets.LoadSubAssetsAsync() 异步加载子资源对象接口
- YooAssets.LoadSceneAsync() 异步加载场景接口
**加载路径的匹配方式**
````C#
// 不带扩展名的模糊匹配
YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic");
// 带扩展名的精准匹配
YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic.mp3");
````
**异步加载范例**
````C#
// 委托加载方式
void Start()
{
AssetOperationHandle handle = YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic.mp3");
handle.Completed += Handle_Completed;
}
void Handle_Completed(AssetOperationHandle handle)
{
AudioClip audioClip = handle.AssetObject as AudioClip;
}
````
````C#
// 协程加载方式
void Start()
{
this.StartCoroutine(AsyncLoad());
}
IEnumerator AsyncLoad()
{
AssetOperationHandle handle = YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic.mp3");
yield return handle;
AudioClip audioClip = handle.AssetObject as AudioClip;
}
````
````C#
// Task加载方式
async void Start()
{
await AsyncLoad();
}
async Task AsyncLoad()
{
AssetOperationHandle handle = YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic.mp3");
await handle.Task;
2022-03-03 18:40:58 +08:00
AudioClip audioClip = handle.AssetObject as AudioClip;
2022-03-03 18:08:32 +08:00
}
````
**资源卸载范例**
````C#
void Start()
{
AssetOperationHandle handle = YooAssets.LoadAssetAsync<AudioClip>("Audio/bgMusic.mp3");
...
handle.Release();
}
````
**预制体同步加载范例**
````C#
var handle = YooAssets.LoadAssetSync<GameObject>(location);
GameObject go = handle.InstantiateObject;
````
````c#
var handle = YooAssets.LoadAssetSync<GameObject>(location);
GameObject go = UnityEngine.Object.Instantiate(handle.AssetObject as GameObject);
````
**子对象同步加载范例**
例如通过TexturePacker创建的图集如果需要访问图集的精灵对象可以通过子对象加载接口。
````c#
var handle = YooAssets.LoadSubAssetsSync<Sprite>(location);
foreach (var asset in handle.AllAssets)
{
Debug.Log($"Sprite name is {asset.name}");
}
````
**场景异步加载范例**
````c#
void Start()
{
// 场景加载参数
SceneInstanceParam param = new SceneInstanceParam();
param.LoadMode = UnityEngine.SceneManagement.LoadSceneMode.Single;
param.ActivateOnLoad = true;
AssetOperationHandle handle = YooAssets.LoadSceneAsync("Scene/Login", param);
handle.Completed += Handle_Completed;
}
void Handle_Completed(AssetOperationHandle handle)
{
SceneInstance instance = handle.AssetInstance as SceneInstance;
Debug.Log(instance.Scene.name);
}
````