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 /
avatar image
0
Question by Shimuni · May 25, 2020 at 05:11 PM · c#programmingspawnpoints

how can i avoid objects spawning on the same Spawn points twice in a row

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class WaveSpawner : MonoBehaviour { public enum SpawnState {Spawning, Waiting, Counting}

 [System.Serializable]
 public class Wave
 {
     public string name;
     public Transform enemy;
     public Transform hostage;
     public int count;
     public int hostageCount;
     public float rate;
 }

 public Wave[] waves;
 private int nextWave = 0;

 public Transform [] spawnPoints;
 
 public float timeBetweenWaves = 5f;
 public float waveCountdown;

 private float searchCoundown = 1f;

 private SpawnState state = SpawnState.Counting;

 // Start is called before the first frame update
 void Start()
 {
     waveCountdown = timeBetweenWaves;
     if(spawnPoints.Length == 0)
     {
         Debug.LogError("No spawn points referenced");
     }
 }

 // Update is called once per frame
 void Update()
 {
     if (state == SpawnState.Waiting)
     {
         //Check if enemies are still alive
         if(!EnemyIsAlive())
         {
             //Begin a new round
             WaveCompleted();
         }
         else
         {
             return;
         }
     }

     if(waveCountdown <= 0)
     {
         if(state != SpawnState.Spawning)
         {
             //Start spawning wave
             StartCoroutine(SpawnWave (waves[nextWave]));
         }
     }
     else 
     {
         waveCountdown -= Time.deltaTime;
     }
 }
 
 void WaveCompleted()
 {
     Debug.Log("Wave Completed");

     state = SpawnState.Counting;
     waveCountdown = timeBetweenWaves;

     if(nextWave + 1 > waves.Length -1)
     {
         nextWave = 0;
         Debug.Log("ALL WAVES COMPLETE! Looping...");
     }
     else
     {
         nextWave++; 
     }
 }
 bool EnemyIsAlive()
 {
     searchCoundown -= Time.deltaTime;
     if(searchCoundown <= 0f)
     {
         searchCoundown = 1f;
         if(GameObject.FindGameObjectWithTag("Enemy") == null)
         {
             return false;
         }
     }
     return true;
 }

 IEnumerator SpawnWave (Wave _wave)
 {
     Debug.Log("Spawning Wave: " + _wave.name);
     state = SpawnState.Spawning;

     //Spawn
     for(int i = 0; i < _wave.count; i++)
     {
         SpawnEnemy(_wave.enemy);
         yield return new WaitForSeconds(1f/_wave.rate); //wait for x seconds
     }
     for(int i = 0; i < _wave.hostageCount; i++)
     {
         SpawnEnemy(_wave.hostage);
        // yield return new WaitForSeconds(1f/_wave.rate); //wait for x seconds
     }

     state = SpawnState.Waiting;
     Debug.Log("Waiting");
     yield break;
 }

 void SpawnEnemy (Transform _enemy)
 {
     Debug.Log("Spawning Enemy: " + _enemy.name);

     Transform _sp = spawnPoints[Random.Range (0, spawnPoints.Length)];
     Instantiate(_enemy, _sp.position, _sp.rotation);
 }

}

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by enerology · May 25, 2020 at 05:30 PM

You can store the last spawn points in a dictionary then call Dictionary.Contains() to see if that spawn point was already used.

Comment
Add comment · Show 11 · 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 Shimuni · May 25, 2020 at 05:32 PM 0
Share

i thought about that as well, but failed in doing it

avatar image enerology Shimuni · May 25, 2020 at 06:08 PM 0
Share

What failed about it. Could you not implement it in code or did the enemies still spawn "on top" of each other? For the prior, I can write it into the code for you and for the latter, it was probably because it's in float form so the units with positions (0,0,0) and (0.01,0,0) would be "on top" of each other with different positions so the dictionary would not contain such. You can fix this by calculating the distance between previous points and checking if the two points distance is less than the size of units.

avatar image Shimuni · May 25, 2020 at 06:10 PM 0
Share

i failed to implement it^^

avatar image enerology Shimuni · May 25, 2020 at 10:44 PM 0
Share

Here I changed two things 1) added to the top in the fields section

 public List<Transform> oldSpawnPoints;

2) added a check in your spawn function

 void SpawnEnemy(Transform _enemy)
 {
     Debug.Log("Spawning Enemy: " + _enemy.name);
         int spawnPointIndex = Random.Range(0, spawnPoints.Length);
         if (!oldSpawnPoints.Contains(spawnPoints[spawnPointIndex]))
         {
             Transform _sp = spawnPoints[Random.Range(0, spawnPoints.Length)];
             oldSpawnPoints.Add(_sp);
             Instantiate(_enemy, _sp.position, _sp.rotation);
         }
         else
         {
             Debug.Log("Spawning Position Already Used");
         }
 }

3) If you need the spawnEnemy to spawn an enemy even after it detected that the spawn position is equal to an old position you could write a for loop and have it try to get a position that does not already exist. If it finds one it can break out of it. like this.

 void SpawnEnemy(Transform _enemy)
 {
     Debug.Log("Spawning Enemy: " + _enemy.name);
         int spawnPointIndex = Random.Range(0, spawnPoints.Length);
         int numOfTries = 10;
         for (int i = 0; i < numOfTries; i++)
         {
             if (!oldSpawnPoints.Contains(spawnPoints[spawnPointIndex]))
             {
                 Transform _sp = spawnPoints[Random.Range(0, spawnPoints.Length)];
                 oldSpawnPoints.Add(_sp);
                 Instantiate(_enemy, _sp.position, _sp.rotation);
                 Debug.Log("Enemy Successfully Spawned");
                 break;
             }
             else
             {
                 Debug.Log("Spawning Position Already Used " + "Try #" + i);
             }
         }
 }


avatar image Shimuni enerology · May 26, 2020 at 11:52 AM 0
Share

also do you have an idear how i can make it so the _wave.hostage doesn´t always spawn ath the end? but rather at a random point durng the wave

avatar image Shimuni · May 26, 2020 at 07:38 AM 0
Share

thank you very much

avatar image Shimuni · May 26, 2020 at 08:34 AM 0
Share

is it possible, that the script keeps objects from spawning if it picks on thats already used ins$$anonymous$$d of just chosing the next spanw point?

avatar image enerology Shimuni · May 26, 2020 at 06:15 PM 0
Share

I added the 3rd code snippet to replace the second if you wanted this feature. It checks spawning position and tries to spawn a Gameobject if a spawn point was not already used, but if it was, it will try again and again for a total of ten times. If you want I can also add a snippet that on the tenth try, scan through the whole array of points, and if it does not find a not used spawn point, then run an action on this like debug.log( "No more valid spawn points").

avatar image Shimuni enerology · May 26, 2020 at 07:02 PM 0
Share

Is it possible so it just doesn't chose the same spot twice directly after each other. Other then that they can be used as often as they want

Show more comments

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

732 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 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 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 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 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

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

C# GameObject Lists 2 Answers

I'm already an experienced programmer, is there anywhere great to go to get familiar with the libraries available in unity? 2 Answers

programming help/teacher? c# 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