• 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 foureyes44 · Apr 22, 2018 at 06:36 PM · c#coroutinewaitforsecondsienumeratorcoroutine errors

WaitForSeconds Not Working

I need to delay an Inventory's open time, but "yield return WaitforSeconds" is not working. Here is the coroutine's code:

 public IEnumerator CheckIfStillHover() {
         yield return new WaitForSecondsRealtime (1.5f); // change to options class variable once it is created
         print ("Fine. I admit it. I cut in line. Happy?");
     }

In case this has something to do with the way I called it, which I also had difficulty with (if anyone knows why I had to store it in a variable to call it, please tell me), here is the code from a separate script which I used to call the coroutine:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 [RequireComponent (typeof (InventoryRenderer))]
 public class ToggleInventoryHover : MonoBehaviour {
 
     //name the inventory to match this string (or vice-versa)
     public string inventoryName = "Inventory";
     GameObject inventory;
     IEnumerator coroutine;
 
     bool isHover = false;
 
     void Start() {
         inventory = GameObject.Find(inventoryName);
         coroutine = inventory.GetComponent<InventoryRenderer> ().CheckIfStillHover ();
     }
 
     void OnMouseOver() {
         isHover = true;
         inventory.GetComponent<InventoryRenderer> ().StartCoroutine(coroutine);
     }
 
     void OnMouseExit() {
         isHover = false;
 
     }
 }


Comment
Add comment · Show 4
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 kaplica · Apr 23, 2018 at 09:20 AM 1
Share

You are not starting the coroutine in this code. Please see: https://docs.unity3d.com/$$anonymous$$anual/Coroutines.html

avatar image Harinezumi kaplica · Apr 27, 2018 at 07:59 AM 0
Share

@foureyes44, listen to kaplica's comment or nviverosb's answer, the problem is that you don't use StartCoroutine(). Just replace your line in Start() with this:

 StartCoroutine(inventory.GetComponent<InventoryRenderer> ().CheckIfStillHover ());
avatar image Instant_Dave · Apr 23, 2018 at 05:06 PM 0
Share

so I get something like this for the first script. I have not tested it. Just edited it in editor but never built.

 [RequireComponent (typeof (InventoryRenderer))]
 public class ToggleInventoryHover : $$anonymous$$onoBehaviour 
 {
     //name the inventory to match this string (or vice-versa)
     public string inventoryName = "Inventory";
     public float delay = 1.5; //delay for inventory open in seconds
     GameObject inventory;
 
     bool isHover = false;
 
     void Start() {
         inventory = GameObject.Find(inventoryName);
     }
     void On$$anonymous$$ouseOver (){
         if (isHover = true)
         StartCoroutine (LoadAfterDelay (delay));
         IEnumerator LoadAfterDelay(float delay)
     
         yield return new WaitForSeconds (delay);
         // Do next directions here
         //    call to get -> inventory.GetComponent<InventoryRenderer> ().CheckIfStillHover ();
     }
 
     void On$$anonymous$$ouseExit() {
         isHover = false;
     }
 }

avatar image Instant_Dave · Apr 23, 2018 at 05:09 PM 0
Share

Then for the second script being called after delay

 //2nd script something like this//
 
 public class CheckIfStillHover;
 bool isHover = true;
 
     void Start(){
     if isHover = true
         print ("Fine. I admit it. I cut in line. Happy?")
     }
     void On$$anonymous$$ouseExit() {
     isHover = false;
     //
 }

4 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by nviverosb · Apr 23, 2018 at 11:25 PM

Here's a possible solution you're not keeping in mind:

WaitForSeconds DOES NOT WORK AS A DELAY OUTSIDE THE COROUTINE.

When you start a Coroutine, it executes itself, but the script inmediately executes the following instruction. For a WaitForSeconds to work, you need to put the code to open the inventory inside the coroutine method.

It would look something like this:

 public IEnumerator CheckIfStillHover() {
          yield return new WaitForSecondsRealtime (1.5f); // change to options class variable once it is created
         //Whatever you want to delay goes in here
  print ("Fine. I admit it. I cut in line. Happy?");
      }



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
avatar image
0

Answer by Karsten · Apr 22, 2018 at 07:38 PM

i would use the Invoke mehod for this its much more straight forward and in the end is doing the same behind the scenes https://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html Also check if OnMouseOver is really called

Comment
Add comment · Show 4 · 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 kaplica · Apr 23, 2018 at 09:22 AM 0
Share

How is the invoke method doing a coroutine? Invoke, as the name implies, invokes a method, on the main thread of course, couroutin is being ran over multiple frames, which is different to a normal method invoke.

avatar image Karsten kaplica · Apr 23, 2018 at 07:40 PM 0
Share

he wants to wait 1,5 seconds, no need for a coroutine in this case

avatar image foureyes44 · Apr 23, 2018 at 11:14 PM 0
Share

Thanks, I will actually do that. (Forgot about Invoking methods) But, I still would like to find out why this wouldn't work.

avatar image Karsten foureyes44 · Apr 24, 2018 at 06:17 PM 0
Share

What happens when you change this line inventory.GetComponent ().StartCoroutine(coroutine); to StartCoroutine(coroutine); ? A future problem i see is that the code in On$$anonymous$$ouseOver will call the routine probably unintended multible times.

I dont know what dev tools you use but you maybe should debug this proper by setting a breakpoint and step-in with Visual Studio for example, and the breakpoint set in the On$$anonymous$$ouseOver() in line 2 would make sense

avatar image
0

Answer by LilGames · Apr 22, 2018 at 08:44 PM

What do you mean when you say "not working" ? It would help if you identified what problem you're having.

Is there a reason you are using WaitForSecondsRealtime and not WaitForSeconds(5) ??

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 foureyes44 · Apr 22, 2018 at 08:49 PM 0
Share

$$anonymous$$y problem is simply that WaitForSeconds is not working. I tried both RealTime and the normal one, but it just doesn’t wait.

avatar image
0

Answer by Instant_Dave · Apr 23, 2018 at 03:50 PM

I'm new but I'd like to help if I can.

public class Whatever : MonoBehaviour { public float delay = 1.5;

     void Start()
     {

OnMouseOver(); // I use Button also StartCoroutine (LoadStuffAfterDelay (delay)); } IEnumerator LoadStuffAfterDelay(float delay) { yield return new WaitForSeconds (delay); // //Do this next directions here
} }

Comment
Add comment · Show 2 · 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 Instant_Dave · Apr 23, 2018 at 03:52 PM 0
Share

Well that didn't post right lol.

     public float delay = 75;
     void Start()
     {
         StartCoroutine (LoadAfterDelay (delay));
     }
     IEnumerator LoadAfterDelay(float delay)
     {
         yield return new WaitForSeconds (delay);
         // Do next directions here
          }
 }
avatar image Instant_Dave · Apr 23, 2018 at 03:58 PM 0
Share

Add to On $$anonymous$$ouse Over and modify scripts a little. 2nd script pointed to from first script after coroutine delay something like

  public Class CheckIfStillHover() {
          if still hover = true
          print ("Fine. I admit it. I cut in line. Happy?");
      }
 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

486 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

Related Questions

Can't get past WaitForSeconds in my coroutine 1 Answer

How to stop coroutines, when paused 2 Answers

I can't start a coroutine. I get a weird message from visual studio 1 Answer

Rotate an object using Quaternion.RotateTowards() inside a Coroutine? 1 Answer

How Return Or Restart A Coroutine When A Variable Increase? 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