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 bgulanowski · Apr 15, 2019 at 02:57 PM · uibuttoneventsystemscrolling

Can I use EventSystem + InputModule to implement scroll via button?

I can easily write a custom component whose sole purpose is to change the position of a scroll rect or the normalized position of a scroll bar. But this seems clumsy and inelegant.

I am trying to understand the EventSystem and InputModule architecture. The documentation is lacking. I've seen some derisive comments about how bad it is. But I still want to see if I can use it, and this seems like a good, focussed problem to practise on.

My high level idea is to transform a mouse click event into a scroll event.

What I would have liked would be a simple way to configure OnClick() in the editor to send a message that is interpreted as a scroll up or down, or something. Or perhaps one more level of complexity, to have a single intermediate, generic component that can send any input even to any object, and use that as the target of OnClick(). Maybe that would work with EventSystem.Execute()? The docs for Execute are very confusing, but I think I will try to experiment with it.

My second idea would be to write a simple input module that generated fake scroll deltas or something, and activate that from OnClick(). But I'm not clear at all on how the default input module and the override interact. Nor is it clear whether the scroll delta change will be picked up immediately by the event system, or if I have to simulate it for a duration, like 1/10th second or something.

Any experiences or suggestions appreciated.

Update: for those interested, this is my working fallback solution:

 using UnityEngine;
 using UnityEngine.UI;
 using System;
 
 [Serializable]
 [RequireComponent(typeof(Scrollbar))]
 public class StepScrollbar : MonoBehaviour {
 
     [SerializeField]
     Button upButton;
 
     [SerializeField]
     Button downButton;

     [SerializeField, HideInInspector]
     Scrollbar scrollbar;
 
     float interval;
 
     float value {
         get => scrollbar.value;
         set => scrollbar.value = value;
     }
     bool Max => Mathf.Abs(value - 1.0f) < Mathf.Epsilon;
     bool Min => Mathf.Abs(value) < Mathf.Epsilon;
 
     void Start() {
         scrollbar = GetComponent<Scrollbar>();
         interval = 1.0f / scrollbar.numberOfSteps;
         UpdateButtons();
     }
 
     public void StepUp() {
         if (!Max) {
             value += interval;
             if (Max) {
                 value = 1.0f;
             }
         }
         UpdateButtons();
     }
 
     public void StepDown() {
         if (!Min) {
             value -= interval;
             if (Min) {
                 value = 0;
             }
         }
         UpdateButtons();
     }
 
     public void UpdateButtons() {
         upButton.interactable = !Max;
         downButton.interactable = !Min;
     }
 }

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

181 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

Related Questions

UI Element Got & Lost Focus Handling 2 Answers

Button is not being clicked. 1 Answer

Can I Simulate the "Submit" Event with Gamepad Buttons? 0 Answers

Button.Select(); does not highlight? 12 Answers

Repositioning Items in ScrollRect During Scroll While Maintaining Offset 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