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.

설치로 이동

소스 정보

저장소
TippingGame/F8Framework
최근 소스 활동
2026년 6월 30일 18:36
감지된 SKILL.md 언어
영어
스타
884
포크
141

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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.
GitHub에서 보기