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 HypoXic5665 · Jul 17, 2018 at 02:59 AM · c#guidropdown

Scrollbar value of 0 resets to 1

Hello, sorry if I missed a question related to this. If there is one out there please point me to it.

I have a scrollbar behaving oddly. I wrote a script to change the scrollbar value of a dropdown list to match the currently selected object when the user expands a dropdown so that the selected item is visible. I do this by finding index of the active element(of the active children) and dividing this by the total number of active children associated with the dropdown to come up with a 0-1 number to position the scroll bar.

The following script behaves as expected when the selected value is anything besides the highest index (ex: activeChild = 12 and activeChildren = 24). However, when the current selection is the last option (ex activeChild = 24 and activeChildren = 24) the scrollbar sets it's value to 1.

     private IEnumerator SetScrollbarValue() {
         int activeChildren = 0;
         int activeChild = 0;
 
         //Get all active child objects in dropdown list
         for (int i = 0; i < transform.childCount - 1; i++) {
             if (transform.GetChild(i).gameObject.activeInHierarchy) {
                 activeChildren++;
             }
         }
 
         //get the index of the currently selected child
         for (int i = 0; i < transform.childCount - 1; i++) {
             if (transform.GetChild(i).gameObject.activeInHierarchy) {
                 if (!transform.GetChild(i).GetComponent<Toggle>().isOn) {
                     activeChild++;
                 } else {
                     break;
                 }
             }
         }
 
         //get the scrollbar
         Scrollbar scrollbar = transform.GetComponentInParent<ScrollRect>().verticalScrollbar;
 
         //set the value of the scrollbar for BottomToTop direction
         if (scrollbar.direction == Scrollbar.Direction.BottomToTop) {
             float value = (1.0f - ((float)activeChild / (float)activeChildren)); //Case where activeChild = 0 and activeChildren = 0
             scrollbar.value = value;
             yield return new WaitForEndOfFrame();
             Debug.Log("value = " + value); //logs 0
             Debug.Log("Scrollbar value = " + scrollbar.value); //logs 1
         }
     }

Now, when I manually check for 0 and force the value to be near 0 it keeps the number and acts as expected (I guess). Note the change directly after 'value' is created

     private IEnumerator SetScrollbarValue() {
         int activeChildren = 0;
         int activeChild = 0;
 
         //Get all active child objects in dropdown list
         for (int i = 0; i < transform.childCount - 1; i++) {
             if (transform.GetChild(i).gameObject.activeInHierarchy) {
                 activeChildren++;
             }
         }
 
         //get the index of the currently selected child
         for (int i = 0; i < transform.childCount - 1; i++) {
             if (transform.GetChild(i).gameObject.activeInHierarchy) {
                 if (!transform.GetChild(i).GetComponent<Toggle>().isOn) {
                     activeChild++;
                 } else {
                     break;
                 }
             }
         }
 
         //get the scrollbar
         Scrollbar scrollbar = transform.GetComponentInParent<ScrollRect>().verticalScrollbar;
 
         //set the value of the scrollbar for BottomToTop direction
         if (scrollbar.direction == Scrollbar.Direction.BottomToTop) {
             float value = (1.0f - ((float)activeChild / (float)activeChildren)); //Case where activeChild = 0 and activeChildren = 0
             //Force 0 to be near 0
             if (value == 0.0f) {
                 value = 0.0001f;
             }
             scrollbar.value = value;
             yield return new WaitForEndOfFrame();
             Debug.Log("value = " + value); //logs 0.0001
             Debug.Log("Scrollbar value = " + scrollbar.value); //logs 9.994933E-05
         }
     }



Any info as to why this may be happening or what I am overlooking would be great. I know this script is severely limited at the moment. But I would like to expand on it to make a fun little utility to help with my use of dropdown menus in Unity.

Thank you,

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 Vicarian · Jul 17, 2018 at 08:18 AM

Scrollbars really aren't meant to be positioned arbitrarily through their value property. You'll want to instead position the content of the ScrollView. You'll have to calculate the relative position of the object you want to bring into view and then adjust the localPosition of the content RectTransform accordingly.

Comment
Add comment · Show 1 · 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 HypoXic5665 · Jul 17, 2018 at 03:25 PM 0
Share

Hmm, I will look into this. I was using the scrollbar value because it seemed fairly simple and I had seen a few other solutions that revolved around this. Thank you, Ill look more into that.

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

551 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

Related Questions

UI Dropdown does not drop. 7 Answers

Distribute terrain in zones 3 Answers

Multiple Cars not working 1 Answer

Is it possible to make EditorGuiLayout.ObjectField(Texture2D) look like ObjectField(String,Texture2D)? 2 Answers

GUISttyle NullReferenceException error. what am I missing ? 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