- Home /
IEnumerator solution!
Hi, folks! First I need to say that i've tried many ways to get this works, but i have problem with access modifiers...
Simplifying, this is the code:
C# using UnityEngine; using System.Collections; using System.IO;
public class Joemerson : MonoBehaviour { public static void Falar (int Nmero) { StartCoroutine(Ler(Nmero)); }
IEnumarator Ler(int N) { ... print("Testing"); // Midia_Legenda is another public class while(Midia_Legenda.Atendimento != Ficha) // Both of this variables are uint { yield return new WaitForEndOfFrame(); } ... // Do some other stuff } }
Please, anyone can explain, what I have to do to this works?
You spelled "IEnumerator" incorrectly. 2. Could you be a little more specific about your errors? Nothing looks wrong so it would help to know what you expect to happen and what actually happens?
$$anonymous$$ethod Falar is static, but Ler requires an instance. Can you start the coroutine the Awake or Start method ins$$anonymous$$d?
Answer by Bunny83 · Mar 10, 2011 at 12:21 AM
After you posted your question over and over again here's a solution for your problem that should work. Coroutines needs a MonoBehaviour script instance to run on. StartCoroutine is a member function of MonoBehaviour so it can't be called from a static function without a script instance. If you want to start one via a static method you need some kind of a singleton.
//C#
using UnityEngine; using System.Collections; using System.IO;
public class Joemerson : MonoBehaviour { private static Joemerson m_Instance = null; public static Joemerson Instance { get { if (m_Instance == null) { // Find a singleton instance m_Instance = (Joemerson)FindObjectOfType(typeof(Joemerson)); // If there is no GameObject with this script, create one if (m_Instance == null) m_Instance = (new GameObject("Joemerson Singleton")).AddComponent<Joemerson>(); } return m_Instance; } }
public static void Falar (int Nmero) { Instance.StartCoroutine(Instance.Ler(Nmero)); }
private IEnumerator Ler(int N) { print("Testing"); while(Midia_Legenda.Atendimento != Ficha) { yield return new WaitForEndOfFrame(); } } }
Your answer
Follow this Question
Related Questions
Why Is yield return new WaitForSeconds() not working 2 Answers
Calling IEnumerator function with variables does not do anything 1 Answer
Waiting twice inside coroutine (C#) 2 Answers
Having trouble using coroutines, making unity hang 0 Answers
Instantiate an object as soon as another object is destroyed 2 Answers