श्रृंखला में कोराटाइन


9

मैं कोराउटिन कॉल की एक श्रृंखला को ढेर करने के बारे में कैसे जाऊंगा जिसे एक के बाद एक निष्पादित किया जाना चाहिए?

मैंने एक चमकती हुई रंग प्रभाव प्राप्त करने की कोशिश की है, जो एक coroutine में रंग lerps की एक श्रृंखला पर काम कर रही है, लेकिन यह काम नहीं कर रहा है।

जवाबों:


7
public static IEnumerator Sequence(params IEnumerator[] sequence)
{
  for(int i = 0 ; i < sequence.Length; ++i)
  {
    while(sequence[i].MoveNext())
      yield return sequence[i].Current;
  }
}

उपयोग उदाहरण:

IEnumerator PrintCoroutine(string arg)
{
  yield return new WaitForSeconds(0.3f);
}

StartCoroutine(Sequence(PrintCoroutine("foo"), PrintCoroutine("bar")));

अच्छा सामान्य उद्देश्य समाधान।
हेजहोग

7

हाइजेनबग ने जो वर्णन किया है, इसके अलावा, कुछ ऐसा जो यूनिटी मैनुअल को स्पष्ट नहीं करता है, वह यह है कि आप yield returnएक Coroutineऑब्जेक्ट कर सकते हैं , जिसे आप StartCoroutineकॉल से प्राप्त करते हैं ।

public IEnumerator RunColorCoroutineLoop()
{
    while (true) {
        yield return StartCoroutine(FirstColorCoroutine());
        yield return StartCoroutine(SecondColorCoroutine());
        yield return StartCoroutine(ThirdColorCoroutine());
        yield return StartCoroutine(FourthColorCoroutine());
    }
}

public IEnumerator FirstColorCoroutine()
{
    SetColor("color1");
    yield return new WaitForSeconds(1f);
}

public IEnumerator SecondColorCoroutine()
{
    SetColor("color2");
    yield return new WaitForSeconds(1f);
}

public IEnumerator ThirdColorCoroutine()
{
    SetColor("color3");
    yield return new WaitForSeconds(1f);
}

public IEnumerator FourthColorCoroutine()
{
    SetColor("color4");
    yield return new WaitForSeconds(1f);
}

यह कभी-कभी मूवनेक्स लूप की तुलना में बेहतर पढ़ने के लिए बनाता है, लेकिन इसका नुकसान यह है कि आप बच्चे को कोरटाइन लूप के शीर्ष पर तर्क के माध्यम से दौड़ने से नहीं रोक सकते हैं, जो IEumumerator के शीर्ष पर अधिक परिष्कृत प्रवाह नियंत्रण तकनीकों के निर्माण के लिए उपयोगी हो सकता है।

इस पर अधिक जानकारी के लिए, आपको इस यूनाइट वीडियो को देखना चाहिए, जिसमें आपके कॉरटाइन शेड्यूलर के निर्माण के बिना आपके कॉरआउट्स से अधिक बाहर निकलना शामिल है।


दोनों (यह और नीचे) asnwers महान हैं। यदि आप पारंपरिक ओओपी में कोड पारदर्शिता के बारे में अधिक परवाह करते हैं तो मैं इस दृष्टिकोण के साथ जाता हूं। यदि आप हालांकि डेटा-संचालित विकास कर रहे हैं @ Heisenbug solution wll आपकी बेहतर सेवा करता है।
IndieForger
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.