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 ChrRubin · Nov 28, 2019 at 03:29 AM · uibuttoncoroutine

Starting coroutine from button does not work as expected

Hi, I have a dialogue box which is able to pop up and pop out using coroutines. Here's the code for the IEnumerator methods:

     public IEnumerator Popup(){
         var t = 0f;
         while(t < 1f){
             var newScale = Mathf.SmoothStep(0f, 1f, t);
             transform.localScale = new Vector3(newScale, newScale, 1f);
 
             t += Time.deltaTime * animationSpeed;
             yield return null;
         }
 
         transform.localScale = new Vector3(1f, 1f, 1f);
     }
 
     public IEnumerator Popout(){
         var t = 0f;
         while (t < 1f){
             var newScale = Mathf.SmoothStep(1f, 0f, t);
             transform.localScale = new Vector3(newScale, newScale, 1f);
 
             t += Time.deltaTime * animationSpeed;
             yield return null;
         }
 
         transform.localScale = new Vector3(0f, 0f, 1f);
         gameObject.SetActive(false);
     }

Currently I have StartCoroutine(Popup()) called in Update() while in Start() I have buttonImage.GetComponent<Button>().onClick.AddListener(() => StartCoroutine(Popout())).

My end result was this: alt text

For some reason the popout coroutine does not get showed properly when using the button. I've tested the coroutine itself by calling it directly in Update() and the dialogue box pops out as expected.

Am I missing something? Thanks in advance.

dialoguebox2.gif (373.0 kB)
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 Bunny83 · Nov 28, 2019 at 04:36 AM

Currently I have StartCoroutine(Popup()) called in Update()

Uhm why? When you call StartCoroutine in Update you start a new coroutine every frame. If you want to show the popup at the start of your game you should place StartCoroutine(Popup()); in Start so it gets started once. Currently when you start your "Popout" coroutine you have hundreds of Popup coroutines running at the same time.

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 ChrRubin · Nov 28, 2019 at 07:46 AM 0
Share

Yup I am a complete idiot for not even noticing that. Seems weird then that it doesn't just completely break the popup animation if it's being called every frame. Thanks for your help!

avatar image
0

Answer by Larry-Dietz · Nov 28, 2019 at 04:01 AM

Instead of trying to add a startcoroutine as a listener, How about creating a method StartPopOut() and assign it to be run on click, and start the coroutine from within that method?

Hope this helps, -Larry

Comment
Add comment · 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

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

218 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

Related Questions

Problem with coroutine. 2 Answers

Graphics Raycaster - Click on overlapped buttons 1 Answer

Unity5 UI - How to trigger button click event while preventing menu item deselect event? 1 Answer

Displaced UI RectTransform collider in some resolutions issue. 1 Answer

How can I have a UI ScrollRect still scroll if pressing a button inside of it? 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