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.

Zur Installation springen

Quellinformationen

Repository
TippingGame/F8Framework
Letzte Quellaktivität
30. Juni 2026 um 18:36
Erkannte Sprache von SKILL.md
Englisch
Sterne
886
Forks
141

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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.
Auf GitHub ansehen