Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
This question was closed Jun 22, 2012 at 12:16 AM by Wolfram for the following reason:

Duplicate Question

avatar image
0
Question by Chris12345 · Jun 20, 2012 at 09:32 PM · spawning

Spawning one by one problem?

How can i get this to spawn one object then after a surtan amount of time spawn another object.

 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;
     
     public int maxNumberOfObjects = 40; //Or whatever
     public float spawnDelay = 10f; //Delay between new ones
     private float lastTime = 0;

     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.Count < maxNumberOfObjects && Time.time - lastTime > spawnDelay)
         {
             Transform newOne;
             lastTime = Time.time;
             objectQueue.Enqueue(newOne = (Transform)Instantiate(prefab));
             newOne.gameObject.SetActiveRecursively(false);
         }
         if(objectQueue.Peek() == null)
         {
             Transform newOne;
             objectQueue.Dequeue();
             objectQueue.Enqueue(newOne = (Transform)Instantiate(prefab));
             newOne.gameObject.SetActiveRecursively(false);
             nextPosition = transform.localPosition;
         }
         if(objectQueue.Peek().gameObject.active == false || 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
Add comment · Show 3
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Chris12345 · Jun 21, 2012 at 10:34 PM 0
Share

Can some one help me?

avatar image Wolfram · Jun 22, 2012 at 12:20 AM 0
Share

You already accepted an answer to this here: http://answers.unity3d.com/questions/270511/how-can-i-spawn-one-by-one.html

And you didn't even heed the suggestion of that answer to create a Coroutine.

Also, this must be the 9th or 10th time you dump that script into a new question, which usually overlaps >50% with one of your other questions.

If you really feel the need to reopen yet another question, at least refer to your other questions, explain why this instance of your question is different, what in the code has changed, why you accepted the answer of your other question(s), although it obviously did not answer your question, and what exactly you want answered.

avatar image Chris12345 · Jun 22, 2012 at 12:25 AM 0
Share

Thanks for the help

1 Reply

  • Sort: 
avatar image
1
Best Answer

Answer by Berenger · Jun 21, 2012 at 02:41 PM

That's close enough. First, there is a spawn cycle, you should use a coroutine or Invoke( "Spawn", cycle).

Your queue already contains instances of those entities, so the spawning should just be dequeueing one instance and making it active. Here, you look up the end, add a new one, then empty the queue every frames with Peek. That's odd.

Comment
Add comment · Show 7 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Chris12345 · Jun 21, 2012 at 06:37 PM 0
Share

can you show me how to too this?

avatar image Berenger · Jun 21, 2012 at 11:02 PM 0
Share

Not sure what you're trying to do, but I would do it like that :

using UnityEngine; using System.Collections.Generic;

public class Platform$$anonymous$$anager : $$anonymous$$onoBehaviour { public Transform prefab; public int numberOfObjects; private Queue objectQueue;

 public int maxNumberOfObjects = 40; //Or whatever
 public float spawnDelay = 10f; //Delay between new ones

 IEnumerator Start () 
 {
     objectQueue = new Queue<Transform>(numberOfObjects);
     for(int i = 0; i < numberOfObjects; i++)
         objectQueue.Enqueue((Transform)Instantiate(prefab));
         
     while( Application.isPlaying )
     {
         yield return new WaitForSeconds( spawnDelay );
         
         // Don't know what is supposed to happen to the spawned object.
         Spawn();
     }
 }

 // public, in case you want to spawn from outside at a specific moment
 public Transform Spawn
 {
     if( numberOfObjects < maxNumberOfObjects )
     {
         Transform newOne;
         newOne = objectQueue.Dequeue(); // Take it off the queue
         newOne.gameObject.SetActiveRecursively(true); // Activate it
         numberOfObjects++;
         
         return newOne;
     }
     return null;
 }

 private void Recycle ( Transform o ) 
 {
     // ...
     o.gameObject.SetActiveRecursively(false); //Deactivate it
     objectQueue.Enqueue(o); // Re queue it
     numberOfObjects = $$anonymous$$athf.$$anonymous$$ax( 0, numberOfObjects-1 );
 }

}

avatar image Chris12345 · Jun 21, 2012 at 11:48 PM 0
Share

Can you put the code you just gave me into my code i have posted at the top. and give me the final code with yours in it.

avatar image Berenger · Jun 22, 2012 at 12:11 AM 1
Share

I removed the stuff I didn't understand. I don't know how it's supposed to work with the rest of your project, what it's exactly supposed to do. You should try to understand my code and see how to improve yours.

avatar image Chris12345 · Jun 22, 2012 at 12:15 AM 0
Share

It is a platform spawner that is suppose to spawn and recycle and right now there is a gap in the spawning objects it spawns them all at ones i would like it to spawn one by one and over time.

Show more comments

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

A node in a childnode? 1 Answer

How to make no spawning gap? 1 Answer

How do i make a spawing level? 1 Answer

Generate obstacles within boundry 1 Answer

How do i get this to spawn over time? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges