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 /
avatar image
0
Question by Burkelbear · Jan 09 at 04:06 AM · unity 2dmethodsfor loop

Code stops working when I put it inside a method, what am I messing up?

Hello! I'm trying to put some code into methods to simplify/optimize my code. The game I'm making is a falling-sand type game and right now the script for each particle goes through the entire grid looking for that type of material and executing its code whenever it shows up. I'm trying to make it so that it only scans the grid one time, and runs the appropriate material's script at each location. Up until now all of my methods have been working, but when I try to do it inside a For Loop, it stops working. Effectively what I'm doing is taking this, which works:

     private void ParticleBehavior()
     {
         for (int x = 0; x < gridXY.x; x++)
         {
             for (int y = 0; y < gridXY.y; y++)
             {
                 if (tilemapCurrent.GetTile(new Vector3Int(x, y - 1, 0)) == null && tilemapNext.GetTile(new Vector3Int(x, y - 1, 0)) == null)
                 {  //if tile below is empty, move there
                     tilemapNext.SetTile(new Vector3Int(x, y - 1, 0), sand);
                 }
                 //For simplicity sake I removed a couple dozens of lines of code here because they're not pertinent to the question
             }
         }
     }

and turning it into this, which doesn't:

         private void ParticleBehavior()
         {
             for (int x = 0; x < gridXY.x; x++)
             {
                 for (int y = 0; y < gridXY.y; y++)
                 {
                 SandBehavior();
                 //If this worked this is also where I'd put every other particle behavior method
                 }
             }
         }
 
         private void SandBehavior()
         {
                     if (tilemapCurrent.GetTile(new Vector3Int(x, y - 1, 0)) == null && tilemapNext.GetTile(new Vector3Int(x, y - 1, 0)) == null)
                     {  //if tile below is empty, move there
                         tilemapNext.SetTile(new Vector3Int(x, y - 1, 0), sand);
                     }
                     //For simplicity sake I removed a couple dozens of lines of code here because they're not pertinent to the question
         }

Thank you!

Comment
Add comment · Show 2
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 NPnpNPnpNP · Jan 10 at 12:42 PM 1
Share

Maybe you should pass x and y to SandBehaviour() ?

For example :

              for (int y = 0; y < gridXY.y; y++)
              {
              SandBehavior(x, y);
              //If this worked this is also where I'd put every other particle behavior method
              }
avatar image rage_co NPnpNPnpNP · Jan 10 at 01:42 PM 0
Share

Exactly, what the problem here is that @Burkelbear 's calling the SandBehaviour function inside a couple of loops, so the variables 'x' and 'y' do no exist outside the for loops, the solution is what you said, although if i may add, the parameters need to be defined with the function too. The corrected code will be:-

 private void ParticleBehavior()
          {
              for (int x = 0; x < gridXY.x; x++)
              {
                  for (int y = 0; y < gridXY.y; y++)
                  {
                  SandBehavior(x, y);
                  //If this worked this is also where I'd put every other particle behavior method
                  }
              }
          }
  
          private void SandBehavior(int x, int y)
          {
                      if (tilemapCurrent.GetTile(new Vector3Int(x, y - 1, 0)) == null && tilemapNext.GetTile(new Vector3Int(x, y - 1, 0)) == null)
                      {  //if tile below is empty, move there
                          tilemapNext.SetTile(new Vector3Int(x, y - 1, 0), sand);
                      }
                      //For simplicity sake I removed a couple dozens of lines of code here because they're not pertinent to the question
          }

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

142 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

Related Questions

Character Select script issues 1 Answer

OnTriggerEnter2D(Collider2D other) 2 Answers

Platform Collider Not Working When Enemy Collides With It 1 Answer

Teleporter 1 Answer

Multi-touch in a unity 2D game 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