원클릭으로
f8-features-assetmanager-workflow
// Use when implementing or troubleshooting AssetManager feature workflows — asset loading, AB mapping, runtime resource retrieval, and scene loading in F8Framework.
// Use when implementing or troubleshooting AssetManager feature workflows — asset loading, AB mapping, runtime resource retrieval, and scene loading in F8Framework.
Use when implementing or troubleshooting Tween feature workflows — tween animations, sequences, chain calls, UI relative motion, and coroutine/async support in F8Framework.
Use when implementing or troubleshooting Audio feature workflows — BGM, voice, SFX, 3D audio, volume control, and AudioMixer in F8Framework.
Use when implementing or troubleshooting ExcelTool feature workflows — config table loading, Excel binary/JSON generation, variant support, and runtime data access in F8Framework.
Use when working with Module editor tools — right-click context menu for creating Module, ModuleMono, StaticModule, and ActivityModule templates in F8Framework.
Use when implementing or troubleshooting Module feature workflows — ModuleCenter lifecycle, module creation, StaticModule, ActivityModule, update attributes in F8Framework.
Use as the routing skill for selecting the correct F8Framework layer skill chain across foundation, features, editor, tools, and build.
| name | f8-features-assetmanager-workflow |
| description | Use when implementing or troubleshooting AssetManager feature workflows — asset loading, AB mapping, runtime resource retrieval, and scene loading in F8Framework. |
⚠️ 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 exampleFF8.Asset = ModuleCenter.CreateModule<AssetManager>();.
| Class | Role |
|---|---|
AssetManager | Core module. Access via FF8.Asset. Handles all loading/unloading. |
AssetBundleManager | Manages AB manifest, AB loading/caching, and dependencies. |
BaseLoader | Async load handle. Supports yield / await / callback patterns. |
BaseDirLoader | Async folder load handle. |
SceneLoader | Async scene load handle with AllowSceneActivation() support. |
FF8.Asset.IsEditorMode = true; // Skip AB, load from AssetDatabase (Editor only)
GameObject cube = FF8.Asset.Load<GameObject>("Cube");
// Full path (needs F5 setting enabled)
GameObject prefab = FF8.Asset.Load<GameObject>("AssetBundles/Prefabs/Cube");
// Sub-asset (e.g., Multiple-mode Sprite)
Sprite sp = FF8.Asset.Load<Sprite>("PackForest01", "PackForest01_12");
// Force remote
Sprite remote = FF8.Asset.Load<Sprite>("PackForest01", "PackForest01_12",
AssetManager.AssetAccessMode.REMOTE_ASSET_BUNDLE);
// Callback
FF8.Asset.LoadAsync<GameObject>("Cube", (go) => { Instantiate(go); });
// Coroutine
yield return FF8.Asset.LoadAsync<GameObject>("Cube");
// async/await (WebGL compatible)
await FF8.Asset.LoadAsync<GameObject>("Cube");
// Loader handle
BaseLoader loader = FF8.Asset.LoadAsync<GameObject>("Cube");
yield return loader;
GameObject result = loader.GetAssetObject<GameObject>();
FF8.Asset.LoadDir("UI/Prefabs"); // Sync folder
FF8.Asset.LoadDirAsync("UI/Prefabs", () => { }); // Async folder
BaseDirLoader dirLoader = FF8.Asset.LoadDirAsync("UI/Prefabs"); // Loader handle
// Interate progress
foreach (var progress in FF8.Asset.LoadDirAsyncCoroutine("UI/Prefabs"))
{
yield return progress;
}
FF8.Asset.LoadAll("Cube"); // All assets in same AB
FF8.Asset.LoadSub("Atlas"); // All sub-assets
FF8.Asset.LoadScene("MainScene"); // Sync
SceneLoader sl = FF8.Asset.LoadSceneAsync("MainScene"); // Async
// Manual activation
SceneLoader sl2 = FF8.Asset.LoadSceneAsync("MainScene",
new LoadSceneParameters(LoadSceneMode.Single), allowSceneActivation: false);
sl2.AllowSceneActivation();
float p = FF8.Asset.GetLoadProgress("Cube"); // Single asset progress
float t = FF8.Asset.GetLoadProgress(); // Total progress
GameObject cachedCube = FF8.Asset.GetAssetObject<GameObject>("Cube"); // Get cached
FF8.Asset.Unload("Cube", false); // Keep dependencies
FF8.Asset.Unload("Cube", true); // Full unload
FF8.Asset.UnloadAsync("Cube", false, () => {}); // Async unload
FF8.Asset.UnloadScene("Scene");
FF8.Asset.UnloadUnused(true);
FF8.Asset.UnloadSceneAsync("Scene");
FF8.Asset.UnloadUnusedAsync(true);
FF8.Asset.IsEditorMode = true.GetLoadProgress() for loading screens.| Error | Cause | Solution |
|---|---|---|
| Purple shaders on Android/iOS AB in Editor | Loading cross-platform AB | Enable Editor mode: FF8.Asset.IsEditorMode = true |
| Scene load fails from AB | Cross-platform AB issue | Enable Editor mode or build AB for current platform |
| Sprite loads as null but Texture2D works | Asset was first loaded as Texture2D | Load as correct type first, or use Load<Sprite> |
| WebGL sync AB load fails | WebGL cannot sync-load AB | Use Resources for sync or switch to async AB loading |
| Same-name asset conflict | Two assets share the same name | Enable full-path loading in F5 build tool |
| AB not found after moving files | Stale AB names on moved files | Manually clear AB names on moved files |
| Skybox purple after scene load | Missing skybox material in build | Include skybox material in a loadable directory |
| Resources scene load fails | Scene in Resources folder | Move scene out of Resources or use Build Settings |