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 seandolan · Apr 10, 2018 at 01:32 PM · c#randomsystemlimitseed

Randomly place a specific number of objects?

I am trying to fill a space game area with stars (currently just small spheres) and asteroids (currently just medium spheres). The stars are randomly placed with the System.Random function and a string seed. I want the seed to always place the stars and asteroids in the exact same spot each time. I have this part working with the System.Random(string seed) functionality.

The stars have a density limit set by a random number as well (always the same density value based on the same seed). But I want exactly 100 asteroids randomly placed. Is there a code efficient way to place exactly 100 asteroids but in random locations?

     int[,] CalcStars(int seed) {
         // Using the existing seeded random numbers, place the
         // exact same number of starts for this seed every time
         System.Random rng = new System.Random (seed);
         int[,] stars = new int[100, 100];
         for (int x = 0; x < 100; x++) {
             for (int y = 0; y < 100; y++) {
                 string rand = rng.Next ().ToString ();
                 stars [x, y] = int.Parse(rand.Substring(rand.Length - 1)) < currentSector.starDensity ? 1 : 0;
             }
         }
         return stars;
     }
 
     public void DrawStars(GameObject starObject){
         // Just cycle through the int[,] stars and every time I find a 1,
         // I place a small sphere prefab
         int starCount = 0;
         for (int x = 0; x < 100; x++) {
             for (int y = 0; y < 100; y++) {
                 if (currentSector.stars [x, y] == 1) {
                     GameObject star = (GameObject)Instantiate(starObject,new Vector3((x-50)*20,0,(y-50)*20),transform.rotation,transform);
                     starCount++;
                 }
             }
         }
         Debug.Log (starCount);
     }
 
     int[,] CalcAsteroids() {
         // 100x100 is my int[,] - I then multiply it by 20 to essential make
         // this 2000x2000 when I actually place the objects
         // This also allows me to space them out away from each other
         int[,] asteroids = new int[100, 100];
         for (int x = 0; x < 100; x++) {
             for (int y = 0; y < 100; y++) {
                 // Place exactly 100 asteroids in the int[,] asteroids
                 // No more, no less, maintaining a fairly random distribution
                 // I don't want it to stop at 100 placed otherwise only the
                 // first part of the map will contain asteroids
                 // I need to ensure all asteroids are placed, and they aren't all in one area
             }
         }
         return asteroids;
     }



Comment
Add comment · Show 1
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 seandolan · Apr 10, 2018 at 01:55 PM 0
Share

I have just looked into "Shuffling" an array - however this would not be based on a seed, thus every time it loads this space sector, the asteroids would be in different spots. So in addition to my question posted - I need to ensure the placement of the 100 asteroids is random by based on the same seed as the stars are generated by (or the Next() of the System.Random).

1 Reply

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

Answer by seandolan · Apr 10, 2018 at 02:26 PM

I got it to work to some degree with a loop of 0 to 99 and my checking 5 times that the entry doesn't exist already. This is the code:

 int[,] CalcAsteroids(int seed) {
         System.Random rng = new System.Random (seed);
         int[,] asteroids = new int[100, 100];
         for (int x = 0; x < 100; x++) {
             for (int y = 0; y < 100; y++) {
                 asteroids [x, y] = 0;
             }
         }
         for (int i = 0; i < 100; i++) {
             int sampleX = rng.Next (0, 100);
             int sampleY = rng.Next (0, 100);
             if (asteroids [sampleX, sampleY] == 0) {
                 asteroids [sampleX, sampleY] = 1;
             } else {
                 sampleX = rng.Next (0, 100);
                 sampleY = rng.Next (0, 100);
                 if (asteroids [sampleX, sampleY] == 0) {
                     asteroids [sampleX, sampleY] = 1;
                 } else {
                     sampleX = rng.Next (0, 100);
                     sampleY = rng.Next (0, 100);
                     if (asteroids [sampleX, sampleY] == 0) {
                         asteroids [sampleX, sampleY] = 1;
                     } else {
                         sampleX = rng.Next (0, 100);
                         sampleY = rng.Next (0, 100);
                         if (asteroids [sampleX, sampleY] == 0) {
                             asteroids [sampleX, sampleY] = 1;
                         } else {
                             sampleX = rng.Next (0, 100);
                             sampleY = rng.Next (0, 100);
                             if (asteroids [sampleX, sampleY] == 0) {
                                 asteroids [sampleX, sampleY] = 1;
                             }
                         }
                     }
                 }
             }
         }
         return asteroids;
     }
Comment
Add comment · Show 2 · 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 poisoned_banana · Apr 10, 2018 at 02:45 PM 0
Share

I'm not 100% sure what you're trying to accomplish with the 2-dimensional array, but wouldn't be a simple loop that creates a random Vector and spawns a star at that point be enough? For Example:

 Random rng = new Random(seed);
 
 int starCount = 100;
 float width = 100f;
 float height = 100f;
 float depth = 50f;
 
 for(int i=0; i<starCount;i++){
    Vector3 spawnpos = Vector3.zero;
    spawnpos.x = rng.Range(-width/2,width/2);
    spawnpos.y = rng.Range(-height/2,height/2);
    spawnpos.z = rng.Range(-depth/2,depth/2);
    Instantiate(starObject,spawnpos,transform.rotation,transform);
 }

avatar image seandolan · Apr 10, 2018 at 02:57 PM 0
Share

That might create overlaps of the asteroids. Al all of my solar systems are generated off of a seed, I need to make sure I am not overlapping any. I can also reference where the asteroids are positioned for my map at a later time. I do appreciate your input. I only wish I could implement your more efficient method of creation but I need the location data easily accessible for other game functionality.

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

472 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

Related Questions

How do I seed the random number generator myself and still get pseudorandom values? 2 Answers

Strange random seed issue with level generation 1 Answer

Distribute terrain in zones 3 Answers

How do you get a seed value from UnityEngine.Random.State? 2 Answers

Inconsistent Random Seed on Scene Load 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