Skip to main content

f8-features-hotupdatemanager-workflow

Use when implementing or troubleshooting HotUpdate feature workflows — version management, hot update, sub-package loading in F8Framework.

Ir a la instalación

Datos de origen

Repositorio
TippingGame/F8Framework
Última actividad en el origen
30 de junio de 2026 a las 18:36
Idioma detectado de SKILL.md
inglés
Estrellas
882
Forks
140

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
2 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
f8-features-hotupdatemanager-workflow
description
Use when implementing or troubleshooting HotUpdate feature workflows — version management, hot update, sub-package loading in F8Framework.
# HotUpdateManager Feature Workflow > **⚠️ IMPORTANT**: Before using this feature, you **MUST** formally initialize F8Framework in the launch sequence. Ensure `ModuleCenter.Initialize(this);` has run first, then create the required module, for example `FF8.HotUpdate = ModuleCenter.CreateModule<HotUpdateManager>();`. ## Use this skill when - The task is about hot update version management, resource patching, or sub-packages. - The user asks about CDN deployment, version checking, or asset hot update flow. ## Path resolution 1. Prefer project source at Assets/F8Framework. 2. For usage docs, read: Assets/F8Framework/Tests/HotUpdateManager/README.md ## Sources of truth - Runtime module: Assets/F8Framework/Runtime/HotUpdateManager - Editor module: Assets/F8Framework/Editor/Build - Test docs: Assets/F8Framework/Tests/HotUpdateManager ## Key classes and interfaces | Class | Role | |-------|------| | `HotUpdateManager` | Core module. Access via `FF8.HotUpdate`. | | `GameConfig` | Holds version info including `LocalGameVersion`. | | `GameConfig.SetAssetRemoteBaseAddressGetter` | Optional runtime CDN base URL provider. Appends `Remote/platform`. | | `GameConfig.SetAssetRemoteFinalAddressGetter` | Optional runtime final remote asset root provider. Does not append suffix. | ## API quick reference ```csharp // Optional remote URL provider. // Use this when test/prod/channel URLs should be selected by code. static string GetHotfixUrl() { #if TEST_VERSION return "https://cdn-test.xxx.com/hotfix/"; #else return "https://cdn-prod.xxx.com/hotfix/"; #endif } // Required module initialization order FF8.HotUpdate = ModuleCenter.CreateModule<HotUpdateManager>(); FF8.Asset = ModuleCenter.CreateModule<AssetManager>(); FF8.Download = ModuleCenter.CreateModule<DownloadManager>(); yield return AssetBundleManager.Instance.LoadAssetBundleManifest(); // Initialize versions FF8.HotUpdate.InitLocalVersion(); GameConfig.SetAssetRemoteBaseAddressGetter(GetHotfixUrl); yield return FF8.HotUpdate.InitRemoteVersion(); yield return FF8.HotUpdate.InitAssetVersion(); // Check for updates var (downloadInfos, allSize) = FF8.HotUpdate.CheckHotUpdate(); // `allSize` is the remaining download size after local file checks / resume offsets. // Both hot update and package checks return `List<HotUpdateManager.DownloadTaskInfo>`. // Start hot update FF8.HotUpdate.StartHotUpdate(downloadInfos, () => { LogF8.Log("Success"); }, () => { LogF8.Log("Failed"); }, (eventArgs) => { long downloaded = eventArgs.TotalDownloadedLength; double speed = eventArgs.DownloadInfo.DownloadedLength / eventArgs.DownloadInfo.DownloadTimeSpan.TotalSeconds; LogF8.Log($"Progress: {downloaded/(1024.0*1024.0):F2}MB/{allSize/(1024.0*1024.0):F2}MB, Speed: {speed/(1024.0*1024.0):F2}MB/s"); }); // Sub-package support var (packageDownloadTasks, packageAllSize) = FF8.HotUpdate.CheckPackageUpdate(GameConfig.LocalGameVersion.SubPackage); FF8.HotUpdate.StartPackageUpdate(packageDownloadTasks, () => { LogF8.Log("Success"); }, () => { LogF8.Log("Failed"); }, (eventArgs) => { /* same progress tracking */ }); ``` ## Workflow 1. Initialize modules in strict order: HotUpdate → Asset → Download → LoadManifest. 2. Initialize local version. If the remote URL should be selected by code, call `GameConfig.SetAssetRemoteBaseAddressGetter(...)` before remote version initialization. 3. Initialize remote version, then asset version. 4. Call `CheckHotUpdate()` to get prepared download infos and the actual remaining download size. 5. Show update dialog with size info to user. 6. Call `StartHotUpdate()` directly with the returned `downloadInfos` and success/failure/progress callbacks. 7. Read overall downloaded bytes from `eventArgs.TotalDownloadedLength`; `eventArgs.DownloadInfo.DownloadedLength` is only for the current file. 8. For sub-packages (DLC), use `CheckPackageUpdate(GameConfig.LocalGameVersion.SubPackage)` to prepare `DownloadTaskInfo` items and pass them directly to `StartPackageUpdate()`. ## Common error handling | Error | Cause | Solution | |-------|-------|----------| | Remote version check fails | CDN unreachable or remote URL provider not registered early enough | Check remote URL config in F5 build tool, or call `GameConfig.SetAssetRemoteBaseAddressGetter(...)` before `InitRemoteVersion()` | | Module init order crash | Wrong initialization order | Must be HotUpdate → Asset → Download → Manifest | | Sub-package not found | Package naming wrong | Use `Package_ + identifier` folder naming | | Progress only shows current file | Read wrong field | Use `eventArgs.TotalDownloadedLength` for overall progress | | Local sandbox stale files | Previous test data | Clear sandbox directory before testing | ## Cross-module dependencies - **AssetManager**: Hot update downloads and reloads asset bundles. - **Download**: File download infrastructure. ## Output checklist - Module initialization order verified. - Hot update flow configured with callbacks. - CDN deployment path documented. - Validation status and remaining risks.
Ver en GitHub