Working single-purpose object pooling solution
This commit is contained in:
@@ -19,9 +19,32 @@ namespace Minigames.DivingForPictures
|
||||
public float spawnY = -5f;
|
||||
public float wobbleMinScale = 0.2f;
|
||||
public float wobbleMaxScale = 1.2f;
|
||||
|
||||
[Header("Object Pooling")]
|
||||
public bool useObjectPooling = true;
|
||||
public int initialPoolSize = 10;
|
||||
public int maxPoolSize = 30;
|
||||
|
||||
private float _timer;
|
||||
private float _nextSpawnInterval;
|
||||
private BubblePool _bubblePool;
|
||||
private Camera _mainCamera; // Cache camera reference
|
||||
|
||||
void Awake()
|
||||
{
|
||||
_mainCamera = Camera.main;
|
||||
|
||||
if (useObjectPooling)
|
||||
{
|
||||
// Create the bubble pool
|
||||
GameObject poolGO = new GameObject("BubblePool");
|
||||
poolGO.transform.SetParent(transform);
|
||||
_bubblePool = poolGO.AddComponent<BubblePool>();
|
||||
_bubblePool.initialPoolSize = initialPoolSize;
|
||||
_bubblePool.maxPoolSize = maxPoolSize;
|
||||
_bubblePool.Initialize(bubblePrefab);
|
||||
}
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
@@ -56,21 +79,36 @@ namespace Minigames.DivingForPictures
|
||||
{
|
||||
float x = Random.Range(spawnXMin, spawnXMax);
|
||||
Vector3 spawnPos = new Vector3(x, spawnY, 0f);
|
||||
Bubble bubble = Instantiate(bubblePrefab, spawnPos, Quaternion.identity, transform);
|
||||
|
||||
Bubble bubble;
|
||||
if (useObjectPooling && _bubblePool != null)
|
||||
{
|
||||
bubble = _bubblePool.GetBubble();
|
||||
bubble.transform.position = spawnPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
bubble = Instantiate(bubblePrefab, spawnPos, Quaternion.identity, transform);
|
||||
}
|
||||
|
||||
// Randomize bubble properties
|
||||
bubble.speed = Random.Range(speedRange.x, speedRange.y);
|
||||
bubble.wobbleSpeed = Random.Range(wobbleSpeedRange.x, wobbleSpeedRange.y);
|
||||
float scale = Random.Range(scaleRange.x, scaleRange.y);
|
||||
bubble.transform.localScale = Vector3.one * scale;
|
||||
// Assign random sprite to BottleSprite
|
||||
|
||||
// Set base scale (initial size) for the bubble
|
||||
float baseScale = Random.Range(scaleRange.x, scaleRange.y);
|
||||
bubble.SetBaseScale(baseScale);
|
||||
|
||||
// Assign random sprite to BubbleSprite (fixed naming from BottleSprite)
|
||||
if (bubbleSprites != null && bubbleSprites.Length > 0)
|
||||
{
|
||||
Sprite randomSprite = bubbleSprites[Random.Range(0, bubbleSprites.Length)];
|
||||
bubble.SetBottleSprite(randomSprite);
|
||||
bubble.SetBubbleSprite(randomSprite);
|
||||
}
|
||||
|
||||
// Random rotation
|
||||
bubble.transform.rotation = Quaternion.Euler(0f, 0f, Random.Range(0f, 360f));
|
||||
|
||||
// Pass min/max scale for wobble clamping
|
||||
bubble.SetWobbleScaleLimits(wobbleMinScale, wobbleMaxScale);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user