Skip to main content

f8-features-gameobjectpool-workflow

Use when implementing or troubleshooting GameObjectPool feature workflows — object pooling, preloading, spawn/despawn, and lifecycle events in F8Framework.

Aller à l'installation

Informations de source

Dépôt
TippingGame/F8Framework
Dernière activité de la source
1 avril 2026 à 11:00
Langue détectée de SKILL.md
anglais
Étoiles
882
Forks
140

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
2 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
f8-features-gameobjectpool-workflow
description
Use when implementing or troubleshooting GameObjectPool feature workflows — object pooling, preloading, spawn/despawn, and lifecycle events in F8Framework.
# GameObjectPool 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.GameObjectPool = ModuleCenter.CreateModule<GameObjectPool>();`. ## Use this skill when - The task is about GameObject pooling, preloading, and spawn/despawn. - The user needs to manage pooled object lifecycle events. - Troubleshooting pool exhaustion, capacity overflow, or despawn issues. ## Path resolution 1. Prefer project source at Assets/F8Framework. 2. If F8Framework is installed as a package, use Packages/F8Framework. 3. For usage docs, read: Assets/F8Framework/Tests/GameObjectPool/README.md ## Sources of truth - Runtime module: Assets/F8Framework/Runtime/GameObjectPool - Editor module: Assets/F8Framework/Editor/GameObjectPool - Test docs: Assets/F8Framework/Tests/GameObjectPool ## Key classes and interfaces | Class | Role | |-------|------| | `GameObjectPoolManager` | Core module. Access via `FF8.GameObjectPool`. | | `F8GameObjectPool` | Individual pool instance with capacity, callbacks, and settings. | | `PoolsPreset` | ScriptableObject for pre-configured pool definitions. | | `IPoolable` | Interface for spawn/despawn callbacks on pooled objects. | | `PoolableStatus` | Enum: Spawned / Despawned / SpawnedOverCapacity. | ## API quick reference ### Spawn and despawn ```csharp // Spawn by name, prefab, or component GameObject clone = FF8.GameObjectPool.Spawn("prefabName"); GameObject clone = FF8.GameObjectPool.Spawn(prefab); MyComp comp = FF8.GameObjectPool.Spawn(compPrefab, Vector3.zero, Quaternion.identity, parent); // Despawn (with optional delay) FF8.GameObjectPool.Despawn(clone, delay: 0.5f); // Particle auto-despawn on complete FF8.GameObjectPool.Spawn(particlePrefab).DespawnOnComplete(); ``` ### Pool management ```csharp // Install preset pools (from ScriptableObject) FF8.GameObjectPool.InstallPools(poolsPreset); // Get pool reference F8GameObjectPool pool = FF8.GameObjectPool.GetPoolByPrefab(prefab); F8GameObjectPool pool = FF8.GameObjectPool.GetPoolByPrefabName("PrefabName"); // Clone status PoolableStatus status = FF8.GameObjectPool.GetCloneStatus(clone); bool isClone = FF8.GameObjectPool.IsClone(clone); // For each clone/pool FF8.GameObjectPool.ForEachPool((pool) => { }); FF8.GameObjectPool.ForEachClone((clone) => { }); // Safe destroy (avoids pool errors) FF8.GameObjectPool.DestroyClone(clone); FF8.GameObjectPool.DestroyAllPools(immediately: false); ``` ### Pool configuration ```csharp pool.Init(); // Init with cached prefab pool.Init(prefab); pool.PopulatePool(16); // Pre-instantiate pool.SetCapacity(32); // Max capacity pool.SetBehaviourOnCapacityReached(BehaviourOnCapacityReached.Recycle); pool.SetDespawnType(DespawnType.DeactivateAndHide); pool.SetCallbacksType(CallbacksType.Interfaces); pool.SetWarningsActive(true); ``` ### Pool operations ```csharp pool.ForEachClone((obj) => { }); pool.ForEachSpawnedClone((obj) => { }); pool.ForEachDespawnedClone((obj) => { }); pool.DestroySpawnedClones(); pool.DestroyDespawnedClones(); pool.DestroyAllClones(); pool.DestroySpawnedClonesImmediate(); pool.DestroyDespawnedClonesImmediate(); pool.DestroyAllClonesImmediate(); pool.DespawnAllClones(); pool.DestroyPool(); pool.DestroyPoolImmediate(); pool.Clear(); ``` ### Lifecycle events ```csharp pool.GameObjectInstantiated.AddListener(OnInstantiated); pool.GameObjectSpawned.AddListener(OnSpawned); pool.GameObjectDespawned.AddListener(OnDespawned); ``` ### IPoolable interface ```csharp public class MyPooledObject : MonoBehaviour, IPoolable { public void OnSpawn() { /* Reset state */ } public void OnDespawn() { /* Cleanup */ } } ``` ## Workflow 1. Create prefabs to pool or define PoolsPreset ScriptableObjects. 2. Optionally pre-populate pools with `PopulatePool()`. 3. Spawn objects via `FF8.GameObjectPool.Spawn()`. 4. Despawn to return objects to pool instead of Destroy. 5. Implement `IPoolable` on pooled objects for reset/cleanup callbacks. 6. Set capacity and overflow behavior for production use. 7. Use `DespawnOnComplete()` for particles. ## Common error handling | Error | Cause | Solution | |-------|-------|----------| | Pool exhausted | All clones in use, no recycle policy | Set `BehaviourOnCapacityReached.Recycle` or increase capacity | | Destroy/Despawn mismatch | Using `Destroy()` on pooled object | Always use `Despawn()` or `DestroyClone()` | | OnSpawn not called | IPoolable not implemented or wrong CallbacksType | Implement `IPoolable` and set `CallbacksType.Interfaces` | ## Cross-module dependencies - **AssetManager**: Pool prefabs can be loaded via AssetManager. ## Output checklist - Pool strategy defined (preload count, capacity, overflow behavior). - Spawn/Despawn lifecycle verified. - Files changed and why. - Validation status and remaining risks.
Voir sur GitHub