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 BTrinity · Oct 19, 2018 at 06:20 AM · c#arrayarray of gameobjects

How to make an array list set to false gradually instead of instantly?

Below is the code for setting all the array in my list to false instantly. So what I would like to achieve is to set the list of array to false gradually.

(example: example I have 10 box in the scene when I click on object 2 I would like to show object 1 and 2 then the rest of the object in the array will set to false gradually)

Anyone have any ideas how I could achieve the effect?

public GameObject[] test;

public void ArrayObj() {

     for (int i = 0; i < test.Length; i++)
     {
         test[i].SetActive(false);
     }
     test[0].SetActive(true);
     test[1].SetActive(true);

}

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
1
Best Answer

Answer by Casiell · Oct 19, 2018 at 06:45 AM

You should use coroutines for that. When you have a coroutine you just put yield return inside the for loop and specify how long you want to wait.

Below is an example of what you want with 1 second intervals:

 public IEnumerator SetInactiveGradually()
 {
      for (int i = 0; i < test.Length; i++)
      {
          test[i].SetActive(false);
          yield return new WaitForSeconds(1);
      }
 }

Just remember, t ostart a coroutine you have to use:

 StartCoroutine(SetInactiveGradually());
Comment
Add comment · Show 3 · 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 BTrinity · Oct 19, 2018 at 07:53 AM 0
Share

Hi Casiell.. but is it possible to make it start from the last array as in 10 9 8 7 ? cause currently its disappearing from 1 2 3 4 5 6

avatar image Hellium BTrinity · Oct 19, 2018 at 07:55 AM 0
Share

With the function I gave, you can give the indices you want and loop through the array in reverse order:

 for ( int i = endIndex - 1 ; i >= startIndex ; i--)
avatar image Casiell BTrinity · Oct 19, 2018 at 08:08 AM 0
Share

Yes, just change the for loop to:

 for (int i = test.Length - 1; i >=0; i--)
avatar image
0

Answer by Hellium · Oct 19, 2018 at 06:47 AM

 public void ArrayObj() 
 {    
     StartCoroutine( TurnOffGameObjects( test, new WaitForSeconds( 0.1f ), 2 ) ;
      test[0].SetActive(true);
      test[1].SetActive(true);
 }
 
 private IEnumerator TurnOffGameObjects( GameObject[] gameObjects, YieldInstruction wait = null, int startIndex = 0, int endIndex = -1 )
 {
      // Clamp the indices to have valid values regarding the array length
      startIndex = Mathf.Clamp( startIndex, 0, gameObjects.Length ) ;

      if( endIndex < 0 ) endIndex = gameObjects.Length ;
      else endIndex = Mathf.Clamp( endIndex, startIndex, gameObjects.Length ) ;

       // Turn off the gameObjects and wait between two deactivations
      for ( int i = startIndex ; i < endIndex ; i++)
      {
          gameObjects[i].SetActive(false);
          yield return wait ;
      }
 }



Comment
Add comment · Show 6 · 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 BTrinity · Oct 19, 2018 at 07:54 AM 0
Share

HI Hellium thanks for the answer its works as well !! but i went with casiell answer as he's code is shorter and easier to use

avatar image BTrinity · Oct 19, 2018 at 08:20 AM 0
Share

@Hellium omg thanks !! your code seems much better now because there's so much I could do with it .. but one last question is it possible to make it after 5-10 object then the WaitForSeconds to be faster? because currently if i change the (new WaitForSeconds( 0.1f )) to 0.001f it doesn't make any difference. you two really help me so much ! O$$anonymous$$G Cheers buddy

avatar image Hellium BTrinity · Oct 19, 2018 at 08:35 AM 0
Share

I see two possibilities, using a function to compute the delay between two spawns according to the index of the spawned object

  private IEnumerator TurnOffGameObjects( GameObject[] gameObjects, System.Func<int, float> delayFunction, int startIndex = 0, int endIndex = -1 )
  {
       // Clamp the indices to have valid values regarding the array length
       startIndex = $$anonymous$$athf.Clamp( startIndex, 0, gameObjects.Length ) ;
       if( endIndex < 0 ) endIndex = gameObjects.Length ;
       else endIndex = $$anonymous$$athf.Clamp( endIndex, startIndex, gameObjects.Length ) ;
        // Turn off the gameObjects and wait between two deactivations
       for ( int i = startIndex ; i < endIndex ; i++)
       {
           gameObjects[i].SetActive(false);
           yield return new WaitForSeconds( delayFunction( i ) ) ;
       }
  }

 public void ArrayObj() 
 {    
     // Will wait 10 seconds between object 0 and 1
     // then, 5 seconds between 1 and 2
     // then 3.33 seconds between 2 and 3, etc....
     // You can use the function you want to compute the delay
     StartCoroutine( TurnOffGameObjects( test, index => 10f / index, 2 ) ;
 }


Or using an AnimationCurve, which is more "visual"

  private IEnumerator TurnOffGameObjects( GameObject[] gameObjects, AnimationCurve delayCurve, int startIndex = 0, int endIndex = -1 )
  {
       // Clamp the indices to have valid values regarding the array length
       startIndex = $$anonymous$$athf.Clamp( startIndex, 0, gameObjects.Length ) ;
       if( endIndex < 0 ) endIndex = gameObjects.Length ;
       else endIndex = $$anonymous$$athf.Clamp( endIndex, startIndex, gameObjects.Length ) ;
        // Turn off the gameObjects and wait between two deactivations
       for ( int i = startIndex ; i < endIndex ; i++)
       {
           gameObjects[i].SetActive(false);
           yield return new WaitForSeconds( delayCurve.Evaluate( i ) ) ;
       }
  }

 // Edit the curve in the inspector
 // The horizontal axis represent the index of the object
 // The vertical axis represents the delay between two deactivations
 // The point (x,y) of the curve will represent the delay (y) between the spawn of object x and x+1
 public AnimationCurve delayCurve ;


  public void ArrayObj() 
  {    
      // Will wait 10 seconds between object 0 and 1
      // then, 5 seconds between 1 and 2
      // then 3.33 seconds between 2 and 3, etc....
      // You can use the function you want to compute the delay
      StartCoroutine( TurnOffGameObjects( test, delayCurve, 2 ) ;
       test[0].SetActive(true);
       test[1].SetActive(true);
  }




avatar image BTrinity Hellium · Oct 22, 2018 at 03:14 AM 0
Share

@Hellium Thanks man.. the image below is the curve that I made I set it to a value of 0.02/0.02 but I cant seems to make the object hide faster it's hiding the object the same rate as a coroutine 0.1f. Cant seems to make it go below that value or making the hiding faster. alt text

Because what's I'm trying to achieve is I have 100 object in scene when I click on object 40 I would like to hide every object above that value. As what you did with the code it works perfectly "StartCoroutine( TurnOffGameObjects( test, new WaitForSeconds( 0.1f ), 40 ) ;" but i would like to make the hiding of the object faster currently it's to slow.

untitled-2.jpg (56.2 kB)
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

562 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

Related Questions

Using an int to find the index of a GameObject array 1 Answer

How do I change gameObject values in an array all at once? 1 Answer

Checking bool on multiple script instances. 1 Answer

Calculate position in an array of gameObjects 0 Answers

Multiple Cars not working 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