| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using YooAsset;
- namespace ET
- {
- /// <summary>
- /// 远端资源地址查询服务类
- /// </summary>
- public class RemoteServices : IRemoteServices
- {
- private readonly string _defaultHostServer;
- private readonly string _fallbackHostServer;
- public RemoteServices(string defaultHostServer, string fallbackHostServer)
- {
- _defaultHostServer = defaultHostServer;
- _fallbackHostServer = fallbackHostServer;
- }
- string IRemoteServices.GetRemoteMainURL(string fileName)
- {
- return $"{_defaultHostServer}/{fileName}";
- }
- string IRemoteServices.GetRemoteFallbackURL(string fileName)
- {
- return $"{_fallbackHostServer}/{fileName}";
- }
- }
- public class ResourcesComponent : Singleton<ResourcesComponent>, ISingletonAwake
- {
- public void Awake()
- {
- YooAssets.Initialize();
- }
- protected override void Destroy()
- {
- YooAssets.Destroy();
- }
- public async ETTask CreatePackageAsync(string packageName, EPlayMode ePlayMode, bool isDefault = false)
- {
- ResourcePackage package = YooAssets.CreatePackage(packageName);
- if (isDefault)
- {
- YooAssets.SetDefaultPackage(package);
- }
- // 编辑器下的模拟模式
- switch (ePlayMode)
- {
- case EPlayMode.EditorSimulateMode:
- {
- EditorSimulateModeParameters createParameters = new();
- createParameters.SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild("ScriptableBuildPipeline", packageName);
- await package.InitializeAsync(createParameters).Task;
- break;
- }
- case EPlayMode.OfflinePlayMode:
- {
- OfflinePlayModeParameters createParameters = new();
- await package.InitializeAsync(createParameters).Task;
- break;
- }
- case EPlayMode.HostPlayMode:
- {
- string defaultHostServer = GetHostServerURL();
- string fallbackHostServer = GetHostServerURL();
- HostPlayModeParameters createParameters = new();
- createParameters.BuildinQueryServices = new GameQueryServices();
- createParameters.RemoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
- await package.InitializeAsync(createParameters).Task;
- break;
- }
- default:
- throw new ArgumentOutOfRangeException();
- }
- }
- static string GetHostServerURL()
- {
- //string hostServerIP = "http://10.0.2.2"; //安卓模拟器地址
- string hostServerIP = "http://127.0.0.1";
- string appVersion = "v1.0";
- #if UNITY_EDITOR
- if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android)
- {
- return $"{hostServerIP}/CDN/Android/{appVersion}";
- }
- else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS)
- {
- return $"{hostServerIP}/CDN/IPhone/{appVersion}";
- }
- else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL)
- {
- return $"{hostServerIP}/CDN/WebGL/{appVersion}";
- }
- return $"{hostServerIP}/CDN/PC/{appVersion}";
- #else
- if (Application.platform == RuntimePlatform.Android)
- {
- return $"{hostServerIP}/CDN/Android/{appVersion}";
- }
- else if (Application.platform == RuntimePlatform.IPhonePlayer)
- {
- return $"{hostServerIP}/CDN/IPhone/{appVersion}";
- }
- else if (Application.platform == RuntimePlatform.WebGLPlayer)
- {
- return $"{hostServerIP}/CDN/WebGL/{appVersion}";
- }
- return $"{hostServerIP}/CDN/PC/{appVersion}";
- #endif
- }
- public void DestroyPackage(string packageName)
- {
- ResourcePackage package = YooAssets.GetPackage(packageName);
- package.UnloadUnusedAssets();
- }
- /// <summary>
- /// 主要用来加载dll config aotdll,因为这时候纤程还没创建,无法使用ResourcesLoaderComponent。
- /// 游戏中的资源应该使用ResourcesLoaderComponent来加载
- /// </summary>
- public async ETTask<T> LoadAssetAsync<T>(string location) where T : UnityEngine.Object
- {
- AssetHandle handle = YooAssets.LoadAssetAsync<T>(location);
- await handle.Task;
- T t = (T)handle.AssetObject;
- handle.Release();
- return t;
- }
- /// <summary>
- /// 主要用来加载dll config aotdll,因为这时候纤程还没创建,无法使用ResourcesLoaderComponent。
- /// 游戏中的资源应该使用ResourcesLoaderComponent来加载
- /// </summary>
- public async ETTask<Dictionary<string, T>> LoadAllAssetsAsync<T>(string location) where T : UnityEngine.Object
- {
- AllAssetsHandle allAssetsOperationHandle = YooAssets.LoadAllAssetsAsync<T>(location);
- await allAssetsOperationHandle.Task;
- Dictionary<string, T> dictionary = new Dictionary<string, T>();
- foreach (UnityEngine.Object assetObj in allAssetsOperationHandle.AllAssetObjects)
- {
- T t = assetObj as T;
- dictionary.Add(t.name, t);
- }
- allAssetsOperationHandle.Release();
- return dictionary;
- }
- }
- }
|