using System.Collections;
using UnityEngine;
using UnityEngine.Events;
using YooAsset;
///
/// YooAsset管理器_加载
///
public partial class YooAssetManager
{
///
/// 同步加载资源
///
public T LoadAssetSync(string packageName, string resourceName) where T : Object
{
AssetHandle assetHandle = packagesDic[packageName].LoadAssetSync(resourceName);
if (assetHandle.AssetObject != null)
{
return assetHandle.AssetObject as T;
}
return null;
}
///
/// 异步加载资源
///
public void LoadAssetAsync(string packageName, string resourceName, UnityAction callBack) where T : Object
{
StartCoroutine(IE_LoadAssetAsync(packageName, resourceName, callBack));
}
///
/// 异步加载资源的协程
///
private IEnumerator IE_LoadAssetAsync(string packageName, string resourceName, UnityAction callBack) where T : Object
{
AssetHandle assetHandle = packagesDic[packageName].LoadAssetAsync(resourceName);
yield return assetHandle;
callBack?.Invoke(assetHandle.AssetObject as T);
}
///
/// 同步加载子资源对象
///
public T LoadSubAssetsSync(string packageName, string resourceName) where T : Object
{
SubAssetsHandle subAssetsHandle = packagesDic[packageName].LoadSubAssetsSync(resourceName);
return subAssetsHandle as T;
}
///
/// 异步加载子对象
///
public void LoadSubAssetsAsync(string packageName, string resourceName, string subResourcesName, UnityAction callBack) where T : Object
{
StartCoroutine(IE_LoadSubAssetsAsync(packageName, resourceName, subResourcesName, callBack));
}
///
/// 异步加载子对象的协程
///
private IEnumerator IE_LoadSubAssetsAsync(string packageName, string resourceName, string subResourcesName, UnityAction callBack) where T : Object
{
SubAssetsHandle handle = packagesDic[packageName].LoadSubAssetsAsync(resourceName);
yield return handle;
var sprite = handle.GetSubAssetObject(subResourcesName);
callBack?.Invoke(handle as T);
}
///
/// 异步加载场景
///
public void LoadSceneAsync(string packageName, string sceneName, UnityAction callBack)
{
StartCoroutine(IE_LoadSceneAsync(packageName, sceneName, callBack));
}
///
/// 异步加载场景的协程
///
private IEnumerator IE_LoadSceneAsync(string packageName, string sceneName, UnityAction callBack)
{
string location = sceneName;
var sceneMode = UnityEngine.SceneManagement.LoadSceneMode.Single;
bool suspendLoad = false;
SceneHandle handle = packagesDic[packageName].LoadSceneAsync(location, sceneMode, suspendLoad);
yield return handle;
callBack?.Invoke();
}
/*
///
/// 加载视频文件
///
public void LoadVideo(string packageName, string videoName, UnityAction callBack)
{
StartCoroutine(IE_LoadVideo(packageName,videoName,callBack));
}
///
/// 加载视频文件的协程
///
private IEnumerator IE_LoadVideo(string packageName,string videoName,UnityAction callBack)
{
var package = YooAssets.GetPackage(packageName);
var handle = package.LoadRawFileAsync(videoName);
yield return handle;
handle.GetRawFilePath();
callBack?.Invoke();
}
*/
///
/// 卸载所有引用计数为零的资源包
/// 可以在切换场景之后调用资源释放方法或者写定时器间隔时间去释放
///
private void UnloadUnusedAssets(string packageName)
{
var package = YooAssets.GetPackage(packageName);
package.UnloadUnusedAssets();
}
///
/// 尝试卸载指定的资源对象
/// 注意:如果该资源还在被使用,该方法会无效
///
///
private void TryUnloadUnusedAsset(string packageName, string resourceName)
{
var package = YooAssets.GetPackage(packageName);
package.TryUnloadUnusedAsset(resourceName);
}
///
/// 强制卸载所有资源包,该方法请在合适的时机调用
/// 注意:Package在销毁的时候也会自动调用该方法
///
private void ForceUnloadAllAssets(string packageName)
{
var package = YooAssets.GetPackage(packageName);
package.ForceUnloadAllAssets();
}
}