рдПрдХрддрд╛ рдореЗрдВ рдХреЛрд░рд╛рдЯрд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛


рдПрдХрддрд╛ рдореЗрдВ Cority (Coroutines, coroutines) рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрд░рдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рд╕рддрд╣реА рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд▓реЗрдЦреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдЙрдирдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░рдВрддрд░ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╕рдореВрд╣ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рднреА рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рдкреИрдЯрд░реНрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЪрдпрди рднреА рдХрд░рддрд╛ рд╣реИред



Coroutines рд╕рд░рд▓ C # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдПрдХ IEnumerator рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдЬ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХрддрд╛ рдореЗрдВ, рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕ рдХреЛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реА рдЙрдкрдЬ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯрд╛рд░реНрдЯрдХреЙрд░рдЯрд╛рдЗрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпреВрдирд┐рдЯреА рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд▓реЗрдЯ рдпреВрдкреАрдбреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрдВрдЬреАрдХреГрдд рдХреЛрдб рдХреЗ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрджрд╛рд╡рд╛рд░ рдореЗрдВ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдпреВрдирд┐рдЯреА рдХреЛ рдкреЛрд▓ рдХрд░рддреА рд╣реИред

рдЙрдкрдЬ рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд┐рдХреНрд╕реНрдбрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦреЗрдВ:
yield return new WaitForFixedUpdate(); 


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЯрдЕрдкрдбреЗрдЯ рдФрд░ рджреГрд╢реНрдп рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦреЗрдВ:
 yield return new WaitForEndOfFrame(); 


рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦреЗрдВ:
 yield return new WaitForSeconds(0.1f); //    100ms 


рдПрдХ рдФрд░ corutin рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ:
 yield return StartCoroutine(AnotherCoroutine()); 


рджреВрд░рд╕реНрде рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦреЗрдВ:
 yield return new WWW(someLink); 


рдЕрдиреНрдп рд╕рднреА рд░рд┐рдЯрд░реНрди рдорд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрдбреЗрдЯ рд▓реВрдк рдХреА рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 yield return null; 


рдЖрдк рдХреЛрд░реБрдЯрд┐рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 yield return break; 


WaitForSeconds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ (рд╣реАрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд) рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреЗрдЬрд╝ рд▓реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдХреЛрд░рдЯрд╛рдЗрди рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдХреЛрд░реБрдЯрд┐рди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:

 void Start() { StartCoroutine(TestCoroutine()); } IEnumerator TestCoroutine() { while(true) { yield return null; Debug.Log(Time.deltaTime); } } 


рдпрд╣ рдХреЛрдб рдПрдХ рд▓реВрдк рдХреЗ рд╕рд╛рде рдХреЛрд░рдЯрд╛рдЗрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдж рд╕реЗ рдЧреБрдЬрд░реЗ рд╣реБрдП рдХрдВрд╕реЛрд▓ рдХреЛ рд▓рд┐рдЦреЗрдЧрд╛ред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрд░рдЯреАрди рдореЗрдВ, рдЙрдкрдЬ рд░рд┐рдЯрд░реНрди рдирд▓ рдХреЛ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдПрдХ рд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдлрд┐рд▓рд╣рд╛рд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ StartCoroutine (TestCoroutine ()) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдЙрдкрдЬ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЗ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЙрдкрдЬ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред рдбреЗрд▓реНрдЯрд╛ рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдирдВрдд рд▓реВрдк рд╡рд╛рд▓реЗ рдХреЛрд░рдЯреАрди рдХреЛ рд╕реНрдЯреЙрдкрдЕрд▓реЙрд░реВрдЯреАрди () , рд╕реНрдЯреЙрдкрдХреЙрд░рдЯрд╛рдЗрди ("рдЯреЗрд╕реНрдЯрдХреЙрд░рдЯрд╛рдЗрди") рдХрд╣рдХрд░ рдпрд╛ рдЕрднрд┐рднрд╛рд╡рдХ рдЧреЗрдордСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд╖реНрдЯ рдХрд░рдХреЗ рдЕрднреА рднреА рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдм рдареАрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕ рдХреА рдорджрдж рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рдХреБрдЫ рдорд╛рдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдирд┐рдореЗрд╢рди рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╛ рд╕рд┐рд░реНрдл рдкреИрджрд╛рд╡рд╛рд░ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдХреЛрд░рд╛рдЙрдЯрд╛рдЗрди рдЪрд▓рд╛рдПрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦреЗрдВред рд▓реЗрдХрд┐рди рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЬрд╛рд░реА рд╣реИ?

рдмреЗрд╢рдХ, рдЖрдк рдЙрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрд░рдЯрд╛рдЗрди рдХреЛ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ:

рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛:

 public bool IsMoving = false; IEnumerator MoveCoroutine(Vector3 moveTo) { IsMoving = true; //        var iniPosition = transform.position; while (transform.position != moveTo) { //              //     yield return null; } IsMoving = false; } 


рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 IEnumetaror PerformMovingCoroutine() { //   foreach(MovableObjectScript s in objectsToMove) { //   StartCoroutine(s.MoveCoroutine(moveTo)); } bool isMoving = true; while (isMoving) { isMoving = false; Array.ForEach(objectsToMove, s => { if (s.IsMoving) isMoving = true; }); if (isMoving) yield return null; } //    } 


MoveToroutine coroutine рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЯреЛрдореЛрд╡ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж "рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░реЗрдВ" рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЦреИрд░, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп, рдХрд╣реАрдВ рднреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╕рдореВрд╣ рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ?
рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВ!

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗ:

 public static class CoroutineExtension { //     < ,   > static private readonly Dictionary<string, int> Runners = new Dictionary<string, int>(); // MonoBehaviour          public static void ParallelCoroutinesGroup(this IEnumerator coroutine, MonoBehaviour parent, string groupName) { if (!Runners.ContainsKey(groupName)) Runners.Add(groupName, 0); Runners[groupName]++; parent.StartCoroutine(DoParallel(coroutine, parent, groupName)); } static IEnumerator DoParallel(IEnumerator coroutine, MonoBehaviour parent, string groupName) { yield return parent.StartCoroutine(coroutine); Runners[groupName]--; } //   ,   ,       public static bool GroupProcessing(string groupName) { return (Runners.ContainsKey(groupName) && Runners[groupName] > 0); } } 


рдЕрдм рдпрд╣ рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕ рдкрд░ рдкреИрд░реЗрд▓рд▓реЙрд░реЙрдЗрдВрдЯреНрд╕рдЧреНрд░реБрдк рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрд░рдЯрд╛рдЗрдирдЯреЗрдХреНрд╕реНрдЯреЗрдВрд╢рди.рдЧреНрд░реБрдкрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╕рд╣реА рди рд╣реЛ рдЬрд╛рдП:

 public class CoroutinesTest : MonoBehaviour { // Use this for initialization void Start() { StartCoroutine(GlobalCoroutine()); } IEnumerator GlobalCoroutine() { for (int i = 0; i < 5; i++) RegularCoroutine(i).ParallelCoroutinesGroup(this, "test"); while (CoroutineExtension.GroupProcessing("test")) yield return null; Debug.Log("Group 1 finished"); for (int i = 10; i < 15; i++) RegularCoroutine(i).ParallelCoroutinesGroup(this, "anotherTest"); while (CoroutineExtension.GroupProcessing("anotherTest")) yield return null; Debug.Log("Group 2 finished"); } IEnumerator RegularCoroutine(int id) { int iterationsCount = Random.Range(1, 5); for (int i = 1; i <= iterationsCount; i++) { yield return new WaitForSeconds(1); } Debug.Log(string.Format("{0}: Coroutine {1} finished", Time.realtimeSinceStartup, id)); } } 


рд╣реЛ рдЧрдпрд╛!

Source: https://habr.com/ru/post/In216185/


All Articles