Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 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 ChrisIsAwesome · Oct 30, 2020 at 06:27 AM · randomrandomizerandomization

RNG State Changes When Loop Iteration is Skipped?

Hey, so I struggled with a bug for a few days in how randomization is done in a mod I've been working on. The problem is that it appears that the RNG state changes if a for loop iteration is skipped (with continue). Here's the code that produces this issue:

 for (int i = 0; i < allCards.Count; i++)
 {
     int randSpawnData = Random.Range(0, spawnData.Count);
 
     // For cards obtained
     if (allCards[i] == null) continue;
 
     // For cards not obtained
     GameCard randCard = allCards[i];
     string randScene = spawnData[randSpawnData].sceneName;
     string randRoom = spawnData[randSpawnData].roomName;
     Vector3 randPos = spawnData[randSpawnData].spawnPos;
     spawnData.RemoveAt(randSpawnData);
     randPos = LockToGrid(randPos);
     randomizedCards.Add(new RandomizedCard(randCard, randScene, randRoom, randPos));
     // Remove used rooms
     if (ModMaster.GetMapType(randScene) != "Overworld")
     {
         spawnData.RemoveAll(item => (item.sceneName == randScene && item.roomName == randRoom));
     }
     if (newFile) spoilerOutput += randomizedCards[i].spoilerData;
 }

That code gets a random spawn point for the card to determine where to place it. However, I want it to skip cards that were already obtained (since this code runs again when file is loaded, so I don't want to add cards already obtained to the pool again). When a card is obtained, that card gets set to null in the allCards list. Then I skip the iteration in this loop.

The catch I found is when the continue runs and it skips to next iteration, it completely re-randomized all cards after the card(s) you obtained. The only reason for this (unless I'm completely oblivious to something) is that the RNG state changes.

We have the RNG state saved so when you load file, it randomizes cards the same way it had originally. All cards up to the one(s) you obtained are randomized the same way, working perfectly fine. But as soon as that continue happens, it re-randomizes the rest of the cards.

Is this a known limitation/bug with RNG state? Or am I missing something entirely?

In case this helps, here's the full script (randomization happens in DoRandomize() and I included the workaround that fixed it for me. Full script

Thanks,

Chris

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

0 Replies

· Add your reply
  • Sort: 

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

141 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

Related Questions

Random objects in coordinates specific 1 Answer

Instantiate Prefab at random times but keep 3 from spawning 2 Answers

Random Generation Algorithm Error 3 Answers

Random.Range is not changing? 1 Answer

Random Sound When Click? 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