using UnityEngine; public class BubbleSpawner : MonoBehaviour { public Bubble bubblePrefab; public Sprite[] bubbleSprites; // Assign in inspector public float spawnInterval = 0.3f; public Vector2 speedRange = new Vector2(0.5f, 2f); public Vector2 scaleRange = new Vector2(0.3f, 0.7f); public Vector2 wobbleSpeedRange = new Vector2(1f, 3f); public Vector2 wobbleAmountRange = new Vector2(0.05f, 0.15f); public float spawnXMin = -3.5f; public float spawnXMax = 3.5f; public float spawnY = -5f; public float wobbleMinScale = 0.2f; public float wobbleMaxScale = 1.2f; private float timer; private float nextSpawnInterval; void Start() { nextSpawnInterval = GetRandomizedInterval(); } void Update() { timer += Time.deltaTime; if (timer >= nextSpawnInterval) { SpawnBubble(); timer = 0f; nextSpawnInterval = GetRandomizedInterval(); } } float GetRandomizedInterval() { return spawnInterval * Random.Range(0.8f, 1.2f); } void SpawnBubble() { float x = Random.Range(spawnXMin, spawnXMax); Vector3 spawnPos = new Vector3(x, spawnY, 0f); Bubble 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); bubble.wobbleAmount = Random.Range(wobbleAmountRange.x, wobbleAmountRange.y); float scale = Random.Range(scaleRange.x, scaleRange.y); bubble.transform.localScale = Vector3.one * scale; // Assign random sprite to BottleSprite if (bubbleSprites != null && bubbleSprites.Length > 0) { Sprite randomSprite = bubbleSprites[Random.Range(0, bubbleSprites.Length)]; bubble.SetBottleSprite(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); } }