123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- using Cysharp.Threading.Tasks;
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using YooAsset;
- namespace ET
- {
- public static class YooAssetProxy
- {
- public enum YooAssetResType
- {
- Unit,
- Config,
- DataConfig,
- SkillConfig,
- Scene,
- Code,
- Effect,
- Shader,
- Material,
- Sound,
- PathFind,
- }
- #region 路径相关
- /// <summary>
- /// 获取YooAsset能识别的资源名
- /// </summary>
- /// <returns></returns>
- public static string GetYooAssetFormatResPath(string rawResName, YooAssetResType yooAssetResType)
- {
- return $"{yooAssetResType}_{rawResName}";
- }
- #endregion
- #region Extension
- public static T GetAsset<T>(this AssetOperationHandle assetOperationHandle)
- where T : UnityEngine.Object
- {
- return assetOperationHandle.GetAssetObject<T>();
- }
- public static T GetSubAsset<T>(this SubAssetsOperationHandle assetOperationHandle, string subAssetName)
- where T : UnityEngine.Object
- {
- return assetOperationHandle.GetSubAssetObject<T>(subAssetName);
- }
- public static byte[] GetRawBytes(this RawFileOperation rawFileOperation)
- {
- return rawFileOperation.LoadFileData();
- }
- public static string GetRawString(this RawFileOperation rawFileOperation)
- {
- return rawFileOperation.LoadFileText();
- }
- #endregion
- #region API
- public static async UniTask<AssetOperationHandle> LoadAssetAsync<T>(string path) where T : UnityEngine.Object
- {
- AssetOperationHandle assetOperationHandle = YooAssets.LoadAssetAsync<T>(path);
- await assetOperationHandle.ToUniTask();
- return assetOperationHandle;
- }
- public static async UniTask<SubAssetsOperationHandle> LoadSubAssetsAsync<T>(string mainAssetPath, string subAssetName)
- where T : UnityEngine.Object
- {
- SubAssetsOperationHandle subAssetsOperationHandle = YooAssets.LoadSubAssetsAsync<T>(mainAssetPath);
- await subAssetsOperationHandle.ToUniTask();
- return subAssetsOperationHandle;
- }
- public static async UniTask<SceneOperationHandle> LoadSceneAsync(string scenePath,
- LoadSceneMode loadSceneMode = LoadSceneMode.Single)
- {
- SceneOperationHandle sceneOperationHandle = YooAssets.LoadSceneAsync(scenePath, loadSceneMode, true);
- await sceneOperationHandle.ToUniTask();
- return sceneOperationHandle;
- }
- public static async UniTask<RawFileOperation> GetRawFileAsync(string path)
- {
- RawFileOperation rawFileOperation = YooAssets.GetRawFileAsync(path);
- await rawFileOperation.ToUniTask();
- return rawFileOperation;
- }
- public static void UnloadUnusedAssets()
- {
- YooAssets.UnloadUnusedAssets();
- }
- public static List<string> GetAssetPathsByTag(string tag)
- {
- AssetInfo[] assetInfos = YooAssets.GetAssetInfos(tag);
- List<string> result = new List<string>(16);
- foreach (var assetInfo in assetInfos)
- {
- result.Add(assetInfo.Address);
- }
- return result;
- }
- public static void InitHostCallbacks(Action<PatchEventMessageDefine.PatchStatesChange> onStateUpdate,
- Action<PatchEventMessageDefine.DownloadProgressUpdate> onDownLoadProgressUpdate)
- {
- PatchUpdater.InitCallback(onStateUpdate, onDownLoadProgressUpdate);
- }
- public static UniTask StartYooAssetEngine(YooAssets.EPlayMode playMode)
- {
- UniTaskCompletionSource uniTaskCompletionSource = new UniTaskCompletionSource();
- // 编辑器下的模拟模式
- if (playMode == YooAssets.EPlayMode.EditorSimulateMode)
- {
- var createParameters = new YooAssets.EditorSimulateModeParameters();
- createParameters.LocationServices = new AddressLocationServices();
- YooAssets.InitializeAsync(createParameters).Completed += _ => { uniTaskCompletionSource.TrySetResult(); };
- }
- // 单机运行模式
- if (playMode == YooAssets.EPlayMode.OfflinePlayMode)
- {
- var createParameters = new YooAssets.OfflinePlayModeParameters();
- createParameters.LocationServices = new AddressLocationServices();
- YooAssets.InitializeAsync(createParameters).Completed += _ => { uniTaskCompletionSource.TrySetResult(); };
- }
- // 联机运行模式
- if (playMode == YooAssets.EPlayMode.HostPlayMode)
- {
- var globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
- var createParameters = new YooAssets.HostPlayModeParameters();
- createParameters.LocationServices = new AddressLocationServices();
- createParameters.DecryptionServices = null;
- createParameters.ClearCacheWhenDirty = false;
- var hostServer = GetHostServerURL();
- createParameters.DefaultHostServer = hostServer;
- //作为DefaultHostServer的备份
- createParameters.FallbackHostServer = hostServer;
- //设置大于1Mb的资源支持断点续传
- createParameters.BreakpointResumeFileSize = 1 * 1014 * 1024;
- string GetHostServerURL()
- {
- string hostServerIP = globalConfig.HotfixResUrl;
- string gameVersion = globalConfig.Version;
- #if UNITY_EDITOR
- if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android)
- return $"{hostServerIP}/android/{gameVersion}";
- else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS)
- return $"{hostServerIP}/ios/{gameVersion}";
- else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL)
- return $"{hostServerIP}/web/{gameVersion}";
- else
- return $"{hostServerIP}/pc/{gameVersion}";
- #else
- if (Application.platform == RuntimePlatform.Android)
- return $"{hostServerIP}/android/{gameVersion}";
- else if (Application.platform == RuntimePlatform.IPhonePlayer)
- return $"{hostServerIP}/ios/{gameVersion}";
- else if (Application.platform == RuntimePlatform.WebGLPlayer)
- return $"{hostServerIP}/web/{gameVersion}";
- else
- return $"{hostServerIP}/pc/{gameVersion}";
- #endif
- }
- // 如果是资源热更模式,则需要等待热更完毕后再Invoke回调
- YooAssets.InitializeAsync(createParameters).Completed += _ =>
- {
- // 运行补丁流程
- PatchUpdater.Run(uniTaskCompletionSource);
- };
- }
- return uniTaskCompletionSource.Task;
- }
- #endregion
- }
- }
|