A pooling system that creates and manages access to your pool of objects.
- Create pools when it's best for your project.
- Avoid garbage collection by resuing objects.
- Use Aquire and Release methods as your "Instantiate" and "Destroy" objects.
- Use events to notify other systems when objects are aquired and released.
Unity 2018.3 and up
- Open the package manager and point to the rep url
-
Open the manifest
-
Add the repo url either via https or ssh
{ "dependencies": { "com.brightlib.poolsystem": "https://github.com/carreraSilvio/poolsystem.git" } }
- Clone or download the project zip
- Copy the repo inside your project assets folder
- Add PoolSystemInitializer behaviour
- Edit the PoolConfig array by adding a string id and a poolable prefab
- Run the game and you'll see the pool in your hierachy
public string poolableId;
public GameObject poolablePrefab;
public int poolSize;
void Awake()
{
PoolSystem.CreatePool(poolableId, poolablePrefab, poolSize);
}
private void Shoot()
{
if (PoolSystem.TryFetchAvailable("Bullet", out PrefabPoolable bullet))
{
bullet.transform.position = transform.position;
}
else
{
Debug.Log("no more bullets available in pool");
}
}
void OnEnable()
{
PoolSystem.AddListener("Bullet", PoolEvent.OnAquire, HandleBulletAquire);
}
private void HandleBulletAquire(string poolableName, int poolSize, int poolableInUse)
{
Debug.Log("A bullet was aquired.");
}