- Home /
Question by
Chris12345 · Jun 16, 2012 at 12:10 AM ·
spawning
How do i get this to spawn over time?
How do i get this script to spawn over time, so the longer you wait the more objects it spawns. how would i do this?here is my curren code.
using UnityEngine;
using System.Collections.Generic;
public class PlatformManager : MonoBehaviour {
public Transform prefab;
public int numberOfObjects;
public float recycleOffset;
public Vector3 minSize, maxSize, minGap, maxGap;
public float minY, maxY;
private Vector3 nextPosition;
private Queue<Transform> objectQueue;
void Start () {
objectQueue = new Queue<Transform>(numberOfObjects);
for(int i = 0; i < numberOfObjects; i++){
objectQueue.Enqueue((Transform)Instantiate(prefab));
}
nextPosition = transform.localPosition;
for(int i = 0; i < numberOfObjects; i++){
Recycle();
}
}
void Update () {
if(objectQueue.Peek() == null)
{
objectQueue.Dequeue();
objectQueue.Enqueue((Transform)Instantiate(prefab));
nextPosition = transform.localPosition;
}
if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
Recycle();
}
}
private void Recycle () {
Vector3 scale = new Vector3(
Random.Range(minSize.x, maxSize.x),
Random.Range(minSize.y, maxSize.y),
Random.Range(minSize.z, maxSize.z));
Vector3 position = nextPosition;
position.x += scale.x * 0.5f;
position.y += scale.y * 0.5f;
Transform o = objectQueue.Dequeue();
o.localScale = scale;
o.localPosition = position;
objectQueue.Enqueue(o);
nextPosition += new Vector3(
Random.Range(minGap.x, maxGap.x) + scale.x,
Random.Range(minGap.y, maxGap.y),
Random.Range(minGap.z, maxGap.z));
if(nextPosition.y < minY){
nextPosition.y = minY + maxGap.y;
}
else if(nextPosition.y > maxY){
nextPosition.y = maxY - maxGap.y;
}
}
}
Comment
Best Answer
Answer by whydoidoit · Jun 16, 2012 at 12:14 AM
Try this:
public int maxNumberOfObjects = 40; //Or whatever
public float spawnDelay = 10f; //Delay between new ones
float lastTime = 0;
void Update () {
if(objectQueue.Count < maxNumberOfObjects && Time.time - lastTime > spawnDelay)
{
lastTime = Time.time;
objectQueue.Enqueue((Transform)Instantiate(prefab));
}
if(objectQueue.Peek() == null)
{
objectQueue.Dequeue();
objectQueue.Enqueue((Transform)Instantiate(prefab));
nextPosition = transform.localPosition;
}
if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
Recycle();
}
}
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
How do i make a spawing level? 1 Answer
Generate obstacles within boundry 1 Answer
I am having spawning problems. 2 Answers
Spawn Script not working on iPhone? 0 Answers