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.

Jump to install

Source facts

Repository
TippingGame/F8Framework
Last source activity
June 30, 2026 at 18:36
Detected SKILL.md language
English
Stars
882
Forks
140

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
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.
View on GitHub