Install
$ agentstack add skill-xeldaralz-everything-claude-unity-object-pooling ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Object Pooling
Every Instantiate() allocates memory. Every Destroy() triggers GC. Pool objects you create and destroy frequently: projectiles, particles, enemies, pickups, audio sources.
Unity Built-In ObjectPool (2021+)
using UnityEngine.Pool;
public sealed class ProjectilePool : MonoBehaviour
{
[SerializeField] private Projectile _prefab;
[SerializeField] private int _defaultCapacity = 20;
[SerializeField] private int _maxSize = 100;
private ObjectPool _pool;
private void Awake()
{
_pool = new ObjectPool(
createFunc: CreateProjectile,
actionOnGet: OnGetProjectile,
actionOnRelease: OnReleaseProjectile,
actionOnDestroy: OnDestroyProjectile,
collectionCheck: false,
defaultCapacity: _defaultCapacity,
maxSize: _maxSize
);
}
public Projectile Get() => _pool.Get();
public void Release(Projectile projectile) => _pool.Release(projectile);
private Projectile CreateProjectile()
{
Projectile projectile = Instantiate(_prefab);
projectile.SetPool(this);
return projectile;
}
private void OnGetProjectile(Projectile projectile)
{
projectile.gameObject.SetActive(true);
}
private void OnReleaseProjectile(Projectile projectile)
{
projectile.gameObject.SetActive(false);
}
private void OnDestroyProjectile(Projectile projectile)
{
Destroy(projectile.gameObject);
}
}
// Projectile returns itself to pool
public sealed class Projectile : MonoBehaviour
{
private ProjectilePool _pool;
public void SetPool(ProjectilePool pool) => _pool = pool;
public void ReturnToPool()
{
_pool.Release(this);
}
}
Warm-Up (Pre-Spawn)
Pre-instantiate objects during loading to avoid runtime hitches:
private void Start()
{
// Pre-warm the pool
List temp = new List();
for (int i = 0; i > _pools = new();
public GameObject Get(GameObject prefab, Vector3 position, Quaternion rotation)
{
if (!_pools.ContainsKey(prefab))
{
_pools[prefab] = new ObjectPool(
() => Instantiate(prefab),
obj => obj.SetActive(true),
obj => obj.SetActive(false),
obj => Destroy(obj),
false, 10, 100
);
}
GameObject obj = _pools[prefab].Get();
obj.transform.SetPositionAndRotation(position, rotation);
return obj;
}
public void Release(GameObject prefab, GameObject instance)
{
_pools[prefab].Release(instance);
}
}
Cached WaitForSeconds
Don't forget to pool WaitForSeconds:
// BAD — allocates every time
yield return new WaitForSeconds(0.5f);
// GOOD — cache and reuse
private readonly WaitForSeconds _halfSecond = new WaitForSeconds(0.5f);
yield return _halfSecond;
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: XeldarAlz
- Source: XeldarAlz/everything-claude-unity
- License: MIT
- Homepage: https://github.com/XeldarAlz/everything-claude-unity#readme
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.