Spawn Pooled objects at random spawn locations
Hi, I'm new to Unity and programming - can anyone help me with this issue?
I want my pooled prefabs to spawn on different locations and when the prefab collides with the player, it chooses a different spawn location. I've got my pooled objects working somehow. But I can't get the random position to work. Hope someone can help. Thanks in advance!
My GamePooler script which is attached to an empty gameobject
public class GamePooler : MonoBehaviour
{
[System.Serializable]
public class Pool
{
public string tag;
public GameObject prefab;
public int size;
}
public static GamePooler Instance;
private void Awake()
{
Instance = this;
}
public List<Pool> pools;
public Dictionary<string, Queue<GameObject>> poolDictionary;
// Start is called before the first frame update
void Start()
{
poolDictionary = new Dictionary<string, Queue<GameObject>>();
foreach(Pool pool in pools)
{
Queue<GameObject> objectPool = new Queue<GameObject>();
for (int i = 0; i < pool.size; i++)
{
GameObject obj = Instantiate(pool.prefab);
obj.SetActive(false);
objectPool.Enqueue(obj);
}
poolDictionary.Add(pool.tag, objectPool);
}
}
public GameObject SpawnFromPool (string tag, Vector3 position, Quaternion rotation)
{
if(!poolDictionary.ContainsKey(tag))
{
Debug.LogWarning("Pool with tag " + tag + " doesn't exist");
return null;
}
GameObject objectToSpawn = poolDictionary[tag].Dequeue();
objectToSpawn.SetActive(true);
objectToSpawn.transform.position = position;
objectToSpawn.transform.rotation = rotation;
IPooler pooledObject = objectToSpawn.GetComponent<IPooler>();
if(pooledObject !=null)
{
pooledObject.OnOjectSpawn();
}
poolDictionary[tag].Enqueue(objectToSpawn);
return objectToSpawn;
}
And my spawner location script
using System.Collections.Generic;
using UnityEngine;
public class MSpawner : MonoBehaviour
{
GamePooler moneyPooler;
public List<Transform> spawnPoints = new List<Transform>();
// Start is called before the first frame update
void Start()
{
GetSpawnPoints();
moneyPooler = GamePooler.Instance;
}
private void FixedUpdate()
{
moneyPooler.SpawnFromPool("Money", RandomSpawnpoint(), Quaternion.identity);
}
public Vector3 RandomSpawnpoint()
{
int randomSP = Random.Range(0, (spawnPoints.Count - 1));
Vector3 randomSpawnPoint = spawnPoints[randomSP].transform.position;
return randomSpawnPoint;
}
void GetSpawnPoints()
{
//List using standar library
//look through nested children
Transform[] spList = transform.GetComponentsInChildren<Transform>(); //note: 'this' is not required anymore
for (int i = 0; i < spList.Length; i++)
{
if (spList[i].tag == "SpawnPoints")
{
//add to the list
spawnPoints.Add(spList[i]);
}
}
}
}
Your answer
Follow this Question
Related Questions
How do I spawn multiple objects in a limited area, at the start of the game? 0 Answers
Could I get an explanation of object pooling and how to do it? 2 Answers
Help with Object Pool Spawning. 1 Answer
Memory Match Game 0 Answers
Is there a way to update the audioclip of an object pooled audiosource instance? 1 Answer