/// <summary> /// 初始化资源系统 /// 注意:在使用AssetSystem之前需要初始化 /// </summary> public static void Initialize(bool simulationOnEditor, int loadingMaxNumber, IDecryptionServices decryptionServices, IBundleServices bundleServices) { _simulationOnEditor = simulationOnEditor; _loadingMaxNumber = loadingMaxNumber; DecryptionServices = decryptionServices; BundleServices = bundleServices; }
/// <summary> /// 初始化资源系统 /// 注意:在使用AssetSystem之前需要初始化 /// </summary> public static void Initialize(string locationRoot, bool simulationOnEditor, IBundleServices bundleServices, IDecryptServices decryptServices) { if (_isInitialize == false) { _isInitialize = true; LocationRoot = AssetPathHelper.GetRegularPath(locationRoot); SimulationOnEditor = simulationOnEditor; BundleServices = bundleServices; DecryptServices = decryptServices; } else { throw new Exception($"{nameof(AssetSystem)} is already initialized"); } }
private AssetBundleManifest LoadUnityManifest() { IBundleServices bundleServices = this as IBundleServices; string loadPath = bundleServices.GetAssetBundleLoadPath(PatchDefine.UnityManifestFileName); AssetBundle bundle = AssetBundle.LoadFromFile(loadPath); if (bundle == null) { return(null); } AssetBundleManifest result = bundle.LoadAsset <AssetBundleManifest>("AssetBundleManifest"); bundle.Unload(false); return(result); }
/// <summary> /// 初始化资源系统 /// 注意:在使用AssetSystem之前需要初始化 /// </summary> public static void Initialize(string locationRoot, bool simulationOnEditor, int runtimeMaxLoadingCount, IBundleServices bundleServices, IDecryptServices decryptServices) { if (_isInitialize == false) { _isInitialize = true; if (runtimeMaxLoadingCount < 3) { runtimeMaxLoadingCount = 3; MotionLog.Warning("AssetSystem RuntimeMaxLoadingCount minimum is 3"); } LocationRoot = AssetPathHelper.GetRegularPath(locationRoot); SimulationOnEditor = simulationOnEditor; RuntimeMaxLoadingCount = runtimeMaxLoadingCount; BundleServices = bundleServices; DecryptServices = decryptServices; } else { throw new Exception($"{nameof(AssetSystem)} is already initialized"); } }
/// <summary> /// 异步初始化 /// </summary> public static InitializationOperation InitializeAsync(InitializeParameters parameters) { if (parameters == null) { throw new Exception($"YooAsset create parameters is null."); } if (parameters.LocationServices == null) { throw new Exception($"{nameof(IBundleServices)} is null."); } else { _locationServices = parameters.LocationServices; } #if !UNITY_EDITOR if (parameters is EditorSimulateModeParameters) { throw new Exception($"Editor simulate mode only support unity editor."); } #endif // 创建驱动器 if (_isInitialize == false) { _isInitialize = true; UnityEngine.GameObject driverGo = new UnityEngine.GameObject("[YooAsset]"); driverGo.AddComponent <YooAssetDriver>(); UnityEngine.Object.DontDestroyOnLoad(driverGo); } else { throw new Exception("YooAsset is initialized yet."); } // 检测参数范围 if (parameters.AssetLoadingMaxNumber < 1) { parameters.AssetLoadingMaxNumber = 1; YooLogger.Warning($"{nameof(parameters.AssetLoadingMaxNumber)} minimum value is 1"); } if (parameters.OperationSystemMaxTimeSlice < 30) { parameters.OperationSystemMaxTimeSlice = 30; YooLogger.Warning($"{nameof(parameters.OperationSystemMaxTimeSlice)} minimum value is 30 milliseconds"); } // 鉴定运行模式 if (parameters is EditorSimulateModeParameters) { _playMode = EPlayMode.EditorSimulateMode; } else if (parameters is OfflinePlayModeParameters) { _playMode = EPlayMode.OfflinePlayMode; } else if (parameters is HostPlayModeParameters) { _playMode = EPlayMode.HostPlayMode; } else { throw new NotImplementedException(); } // 初始化异步操作系统 OperationSystem.Initialize(parameters.OperationSystemMaxTimeSlice); // 初始化下载系统 if (_playMode == EPlayMode.HostPlayMode) { #if UNITY_WEBGL throw new Exception($"{EPlayMode.HostPlayMode} not supports WebGL platform !"); #else var hostPlayModeParameters = parameters as HostPlayModeParameters; DownloadSystem.Initialize(hostPlayModeParameters.BreakpointResumeFileSize); #endif } // 初始化资源系统 InitializationOperation initializeOperation; if (_playMode == EPlayMode.EditorSimulateMode) { _editorSimulateModeImpl = new EditorSimulateModeImpl(); _bundleServices = _editorSimulateModeImpl; AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); var editorSimulateModeParameters = parameters as EditorSimulateModeParameters; initializeOperation = _editorSimulateModeImpl.InitializeAsync( editorSimulateModeParameters.LocationToLower, editorSimulateModeParameters.SimulatePatchManifestPath); } else if (_playMode == EPlayMode.OfflinePlayMode) { _offlinePlayModeImpl = new OfflinePlayModeImpl(); _bundleServices = _offlinePlayModeImpl; AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); initializeOperation = _offlinePlayModeImpl.InitializeAsync(parameters.LocationToLower); } else if (_playMode == EPlayMode.HostPlayMode) { _hostPlayModeImpl = new HostPlayModeImpl(); _bundleServices = _hostPlayModeImpl; AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices); var hostPlayModeParameters = parameters as HostPlayModeParameters; initializeOperation = _hostPlayModeImpl.InitializeAsync( hostPlayModeParameters.LocationToLower, hostPlayModeParameters.ClearCacheWhenDirty, hostPlayModeParameters.DefaultHostServer, hostPlayModeParameters.FallbackHostServer); } else { throw new NotImplementedException(); } // 监听初始化结果 initializeOperation.Completed += InitializeOperation_Completed; return(initializeOperation); }
/// <summary> /// 创建游戏模块 /// </summary> private IEnumerator CreateGameModules() { // 创建事件管理器 MotionEngine.CreateModule <EventManager>(); // 创建变体规则集合 var variantRules = new List <VariantRule>(); { var rule1 = new VariantRule(); rule1.VariantGroup = new List <string>() { "EN", "KR" }; rule1.TargetVariant = Language == ELanguage.Default ? VariantRule.DefaultTag : Language.ToString(); variantRules.Add(rule1); var rule2 = new VariantRule(); rule2.VariantGroup = new List <string>() { "HD" }; rule2.TargetVariant = Quality == EQuality.Default ? VariantRule.DefaultTag : Quality.ToString(); variantRules.Add(rule2); } // 资源服务接口 IBundleServices bundleServices = null; if (SkipCDN) { var localBundleServices = new LocalBundleServices(variantRules); yield return(localBundleServices.InitializeAsync(SimulationOnEditor)); bundleServices = localBundleServices; } else { string myWebServer = "127.0.0.1"; string myCDNServer = "127.0.0.1"; var patchCreateParam = new PatchManager.CreateParameters(); patchCreateParam.ServerID = PlayerPrefs.GetInt("SERVER_ID_KEY", 0); patchCreateParam.ChannelID = 0; patchCreateParam.DeviceID = 0; patchCreateParam.TestFlag = PlayerPrefs.GetInt("TEST_FLAG_KEY", 0); patchCreateParam.CheckLevel = ECheckLevel.CheckSize; patchCreateParam.WebServers = new Dictionary <RuntimePlatform, string>(); patchCreateParam.WebServers.Add(RuntimePlatform.Android, $"{myWebServer}/WEB/Android/GameVersion.php"); patchCreateParam.WebServers.Add(RuntimePlatform.IPhonePlayer, $"{myWebServer}/WEB/Iphone/GameVersion.php"); patchCreateParam.CDNServers = new Dictionary <RuntimePlatform, string>(); patchCreateParam.CDNServers.Add(RuntimePlatform.Android, $"{myCDNServer}/CDN/Android"); patchCreateParam.CDNServers.Add(RuntimePlatform.IPhonePlayer, $"{myCDNServer}/CDN/Iphone"); patchCreateParam.DefaultWebServerIP = $"{myWebServer}/WEB/PC/GameVersion.php"; patchCreateParam.DefaultCDNServerIP = $"{myCDNServer}/CDN/PC"; patchCreateParam.VariantRules = variantRules; PatchManager patchManager = MotionEngine.CreateModule <PatchManager>(patchCreateParam); yield return(patchManager.InitializeAync()); bundleServices = MotionEngine.GetModule <PatchManager>(); EventManager.Instance.AddListener <PatchEventMessageDefine.PatchStatesChange>(OnHandleEventMessage); EventManager.Instance.AddListener <PatchEventMessageDefine.OperationEvent>(OnHandleEventMessage); } // 创建资源管理器 var resourceCreateParam = new ResourceManager.CreateParameters(); resourceCreateParam.LocationRoot = GameDefine.AssetRootPath; resourceCreateParam.SimulationOnEditor = SimulationOnEditor; resourceCreateParam.BundleServices = bundleServices; resourceCreateParam.DecryptServices = null; resourceCreateParam.AutoReleaseInterval = 10f; MotionEngine.CreateModule <ResourceManager>(resourceCreateParam); if (SkipCDN) { // 开始游戏 StartGame(); } else { // 初始化补丁窗口 yield return(PatchWindow.Instance.InitializeAsync()); WaitForSeconds waiting = new WaitForSeconds(1f); yield return(waiting); // 开始补丁更新流程 PatchManager.Instance.Download(); } }