YooAsset/Docs/CodeTutorial4.md

100 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 解决方案
### FairyGUI支持解决方案
注意在FairyGUI的面板销毁的时候将资源句柄列表释放否则会造成资源泄漏。
````c#
// 资源句柄列表
private List<AssetOperationHandle> _handles = new List<AssetOperationHandle>(100);
// 加载方法
private object LoadFunc(string name, string extension, System.Type type, out DestroyMethod method)
{
method = DestroyMethod.None; //注意这里一定要设置为None
string location = $"FairyRes/{name}{extension}";
var handle = YooAssets.LoadAssetSync(location , type);
_handles.Add(handle);
return handle.AssetObject;
}
// 执行FairyGUI的添加包函数
UIPackage.AddPackage(name, LoadFunc);
// 释放资源句柄列表
private void ReleaseHandles()
{
foreach(var handle in _handles)
{
handle.Release();
}
_handles.Clear();
}
````
### UniTask支持解决方案
[仓库链接](https://github.com/Cysharp/UniTask)
- 请去下载对应的源码,并删除此目录最后的波浪线
- 在项目的 `asmdef` 文件中添加对 `UniTask.YooAsset` 的引用
- 在 UniTask `_InternalVisibleTo.cs` 文件中增加 `[assembly: InternalsVisibleTo("UniTask.YooAsset")]` 后即可使用
代码示例
```csharp
var handle = YooAssets.LoadAssetAsync<GameObject>("Assets/Res/Prefabs/TestImg.prefab");
await handle.ToUniTask();
var obj = handle.AssetObject as GameObject;
var go = Instantiate(obj, transform);
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
```
### 分布式构建解决方案
**1.3.0+版本升级指南**
在升级之前请导出AssetBundleCollector的配置为XML文件然后升级YooAssets库。
首次需要打开AssetBundleCollector窗口然后导入之前保存的XML文件。
在运行游戏之前,请保证资源包可以构建成功!
```c#
public static YooAssetPackage AssetPackage;
IEnumerator Start()
{
// 初始化YooAssets资源系统必须代码
YooAssets.Initialize();
// 创建资源包实例
AssetPackage = YooAssets.CreateAssetPackage("DefaultPackage");
// 初始化资源包
......
yield return AssetPackage.InitializeAsync(createParameters);
// 更新资源包版本
......
var operation = AssetPackage.UpdateManifestAsync(packageCRC);
yield return operation;
// 下载更新文件
var downloader = AssetPackage.CreatePatchDownloader(downloadingMaxNum, failedTryAgain);
downloader.BeginDownload();
yield return downloader;
// 加载资源对象
var assetHandle = AssetPackage.LoadAssetAsync("Assets/GameRes/npc.prefab");
yield return assetHandle;
......
}
```