Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by jordaneden · May 10, 2016 at 12:15 PM · c#listrandomtimerspawning

How would I implement a random spawn timer into a list based spawn system?

Currently I'm spawning ships to these transforms, which move at random speeds on a single axis and destroy after a set time. What I need is to implement a random spawn timer into the following script to create the illusion of traffic flow, which can be edited in the inspector for performance/density balance.

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class Ship_Traffic_Spawner : MonoBehaviour
 {
     public int numberOfItemsToSpawn = 49; // modifiable in the inspector
     public List<Transform> spawnLocations = new List<Transform>();
     public List<GameObject> spawnPrefab = new List<GameObject>();
     public List<GameObject> spawnClone = new List<GameObject>();
 
     void Start()
     {
         for (int i = 0; i < numberOfItemsToSpawn; i++)
         {
             if ((i < spawnPrefab.Count) && (spawnPrefab [i] != null) &&
                 (i < spawnLocations.Count) && (spawnLocations [i] != null))
             {
                 // this line spawns a prefab at an objects position
                 spawnClone [i] = Instantiate (spawnPrefab [i], spawnLocations [i].transform.position, Quaternion.Euler (0, 0, 0)) as GameObject;
             }
         }
     }
 }
Comment
Add comment
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

2 Replies

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by M-Hanssen · May 11, 2016 at 09:19 AM

I've modified your code to make everything random ;-)

I hope this makes it clear how to use the Random.range method

Notes:

  • Always try to initialize your variables inside the Awake method

  • Use capital CamelCase for public variables

  • Class names with underscores are bad practice, Change it to "ShipTrafficSpawner" if possible

     public class Ship_Traffic_Spawner : MonoBehaviour
     {
         public int NumberOfItemsToSpawn = 49; // modifiable in the inspector
         public List<Transform> SpawnLocations;
         public List<GameObject> SpawnPrefabs;
         public List<GameObject> SpawnClones;
         public float MinSpawnDelay;
         public float MaxSpawnDelay = 1;
     
         protected void Awake()
         {
             SpawnLocations = new List<Transform>();
             SpawnPrefabs = new List<GameObject>();
             SpawnClones = new List<GameObject>();
         }
         
         protected void Start()
         {
             StartCoroutine(SpawnCoroutine());
         }
     
         protected IEnumerator SpawnCoroutine()
         {
             for (int i = 0; i < NumberOfItemsToSpawn; i++)
             {
                 // Get a random delay
                 float delay = Random.Range(MinSpawnDelay, MaxSpawnDelay);
                 // Get a random spawn location
                 Transform spawnLocation = SpawnLocations[Random.Range(0, SpawnLocations.Count)];
                 // Get a random prefab to spawn
                 GameObject spawnPrefab = SpawnPrefabs[Random.Range(0, SpawnPrefabs.Count)];
                 // Wait for the delay
                 yield return new WaitForSeconds(delay);
                 // Spawn the random prefab at a random location
                 SpawnClones.Add((GameObject)Instantiate(spawnPrefab, spawnLocation.position, Quaternion.Euler(0, 0, 0)));
             }
         }
     }
    
    
    
    
    
    
    
    
    
Comment
Add comment · Show 5 · 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 jordaneden · May 11, 2016 at 10:52 AM 0
Share

Now nothing works...

ArgumentOutOfRangeException: Argument is out of range. Parameter name: index System.Collections.Generic.List`1[UnityEngine.Transform].get_Item (Int32 index) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:633) Ship_Traffic_Spawner+c__Iterator0.$$anonymous$$oveNext () (at Assets/Ship_Scripts/Ship_Traffic_Spawner.cs:33) UnityEngine.$$anonymous$$onoBehaviour:StartCoroutine(IEnumerator) Ship_Traffic_Spawner:Start() (at Assets/Ship_Scripts/Ship_Traffic_Spawner.cs:23)

avatar image M-Hanssen jordaneden · May 11, 2016 at 11:59 AM 0
Share

You will have to fill the SpawnLocations and SpawnPrefabsin your inspector of course!

avatar image jordaneden M-Hanssen · May 11, 2016 at 12:35 PM 0
Share

I filled them, but on play all assigned prefabs/transforms disappear.

Show more comments
avatar image jordaneden · May 11, 2016 at 01:04 PM 0
Share

Thanks so much for all your help!!

avatar image
0

Answer by juippi112 · May 10, 2016 at 06:38 PM

Maybe change the Start function into an IEnumerator. Then you could create a while loop like this:

 int x = 0;
 while(x < numberOfItemsToSpawn)
 {
      x++;
      //spawn a clone to some spawnpoint.
      
      yield return new WaitForSeconds(Random.Range(minDelay, maxDelay));
 } 

Now just remember to add public float minDelay = .5f, maxDelay = 1f.

Comment
Add comment · Show 1 · 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 jordaneden · May 11, 2016 at 04:49 AM 0
Share

Forgive my ignorance, but where exactly does this go?

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

158 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Picking up an item and spawning a new one. 0 Answers

Can you help with a random event in my FPS? 0 Answers

C# - Need help making an enemy spawn timer 1 Answer

How to Activate Random GameObjects from a list without affecting position 1 Answer

I need help making my objects spawn correctly. 0 Answers


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