# 资源加载 在加载资源对象的时候只需要提供相对路径,统一约定该相对路径名称为:location 资源加载接口: - YooAssets.LoadAssetSync() 同步加载资源对象接口 - YooAssets.LoadSubAssetsSync() 同步加载子资源对象接口 - YooAssets.LoadAssetAsync() 异步加载资源对象接口 - YooAssets.LoadSubAssetsAsync() 异步加载子资源对象接口 - YooAssets.LoadSceneAsync() 异步加载场景接口 **加载路径的匹配方式** ````C# // 不带扩展名的模糊匹配 YooAssets.LoadAssetAsync("Audio/bgMusic"); // 带扩展名的精准匹配 YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); ```` **异步加载范例** ````C# // 委托加载方式 void Start() { AssetOperationHandle handle = YooAssets.LoadAssetAsync("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("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("Audio/bgMusic.mp3"); await handle.Task; AudioClip audioClip = handle.AssetObject as AudioClip; } ```` **资源卸载范例** ````C# void Start() { AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); ... handle.Release(); } ```` **预制体同步加载范例** ````C# var handle = YooAssets.LoadAssetSync(location); GameObject go = handle.InstantiateObject; ```` ````c# var handle = YooAssets.LoadAssetSync(location); GameObject go = UnityEngine.Object.Instantiate(handle.AssetObject as GameObject); ```` **子对象同步加载范例** 例如:通过TexturePacker创建的图集,如果需要访问图集的精灵对象,可以通过子对象加载接口。 ````c# var handle = YooAssets.LoadSubAssetsSync(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); } ```` **原生文件加载范例** 例如:wwise的初始化文件 ````c# void Start() { //获取资源包信息 string location = "wwise/init.bnk"; BundleInfo bundleInfo = YooAssets.GetBundleInfo(location); //文件路径 string fileSourcePath = bundleInfo.LocalPath; string fileDestPath = $"{Application.persistentDataPath}/Audio/init.bnk"; //拷贝文件 File.Copy(fileSourcePath, fileDestPath, true); //注意:在安卓平台下,可以通过如下方法判断文件是否在APK内部。 if(bundleInfo.IsBuildinJarFile()) { ... } } ````