μ½λ£¨ν΄ μ μ
Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed.
μ€νμ μ§μ°κ³Ό μ¬κ°λ₯Ό νμ©ν¨μΌλ‘μ, λΉ μ μ μ λ©ν°νμ€νΉμ μν μλΈλ£¨ν΄μ μΌλ°νν μ»΄ν¨ν° νλ‘κ·Έλ¨ κ΅¬μ±μμ
μ€λͺ | λ³νμ±, λμμ±(Concurrency) | λ³λ ¬μ±(Parallelism) | |
λΉ μ μ μ λ©ν°νμ€νΉ (Non-preemptive multitasking) |
CPUλ₯Ό μ°¨μ§νκ³ μλ μ°λ λκ° CPU μ°μ°μ΄ νμμμμ λνλμ λ, μ΄μ체μ κ° νμν μ μλ κ²½μ° | βοΈ | β |
μ μ ν λ©ν°νμ€νΉ (Preemptive multitasking) |
CPUλ₯Ό μ°¨μ§νκ³ μλ μ°λ λκ° CPU μ°μ°μ΄ νμμμμ λνλμ λ, μ΄μ체μ κ° νμν μ μλ κ²½μ° | β | βοΈ |
- λ³νμ±(Concurrency), λμμ±
- λμμ μ€νλλ κ²μ²λΌ 보μ
- Logical Levelμ μν¨
- Single Core μ¬μ©
- 물리μ μΌλ‘ λ³λ ¬μ΄ μλ μμ°¨μ μΌλ‘ λμν μ μλ€.
- μ€μ λ‘λ Time-sharingμΌλ‘ CPUλ₯Ό λλ μ¬μ©ν¨μΌλ‘μ¨ μ¬μ©μκ° Concurrencyλ₯Ό λλ μ μλλ‘ νλ€.
- λ³λ ¬μ±(Parallelism)
- μ€μ λ‘ λμμ μμ μ΄ μ²λ¦¬λ¨
- Physical(Machine) Levelμ μν¨
- μ€μ§ Multi Coreμμλ§ κ°λ₯
- 루ν΄(λ©μΈ λ£¨ν΄ + μλΈ λ£¨ν΄): μ»΄ν¨ν° νλ‘κ·Έλ¨μμ νλμ μ 리λ μΌ
- λ©μΈ 루ν΄: νλ‘κ·Έλ¨ μ 체μ κ°κ΄μ μΈ λμ μ μ°¨λ₯Ό νμνλλ‘ λ§λ€μ΄μ§ κ²
- μλΈ λ£¨ν΄: λ°λ³΅λλ νΉμ κΈ°λ₯μ λͺ¨μ λ³λλ‘ λ¬Άμ΄ λμ μ΄λ¦μ λΆμ¬ λμ κ²
μλΈλ£¨ν΄κ³Ό μ½λ£¨ν΄ μ°¨μ΄μ
μλΈλ£¨ν΄ | μ½λ£¨ν΄ |
λ©μΈ or μλΈ λ£¨ν΄μ΄ μμ | |
λ©μΈλ£¨ν΄μμ νΉμ μλΈλ£¨ν΄μ 곡κ°μΌλ‘ μ΄λν νμ return μν΄ νΈμΆμλ‘ λμμ λ€μ νλ‘μΈμ€λ₯Ό μ§ν | 루ν΄μ μ§ννλ μ€κ°μ λ©μΆμ΄μ νΉμ μμΉλ‘ λμκ°λ€κ° λ€μ μλ μμΉλ‘ λμμ λλ¨Έμ§ λ£¨ν΄ μν κ°λ₯ |
μ§μ μ§μ μ΄ μ¬λ¬κ°μ΄κΈ° λλ¬Έμ λ©μΈλ£¨ν΄μ μ’ μμ μ΄μ§ μμ λλ±νκ² λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μμ | μ§μ μ κ³Ό λ°νμ μ΄ λ¨ νλλ°μ μμ΄ λ©μΈλ£¨ν΄μ μ’ μμ |
μ½λ£¨ν΄ μ¬μ©μ΄μ
μ½λ£¨ν΄ μ¬μ©λ²
μ½λ£¨ν΄ μ μΈνκΈ°
IEnumerator ParticleFadeOut()
{
SpriteRenderer Renderer = this.GetComponent<SpriteRenderer>();
Color color = Renderer.color;
while(color.a > 0.0f)
{
color.a -= 0.2f;
Renderer.color = color;
yield return new WaitForSeconds(0.1f);
}
}
- μ½λ£¨ν΄μ λ¦¬ν΄ νμ μ IEnumerator(μ΄κ±°μ)λ‘ μ μΈνλ€.
- ν¨μ λμ μ€ μνμ μ€λ¨ν λ, yield returnμΌλ‘ returnνλ€.
- ν΄λΉ λ°©μμΌλ‘ 리ν΄ν κ²½μ°, κ·Έ μμΉμμ νλμ΄ μ€λ¨λ ν λ€μ λμμ¨λ€.
- Yieldμ μ’ λ₯λ λ€μκ³Ό κ°λ€
- yield return null; -> λ€μ νλ μμ λ°λ‘ μμ
- yield return new WaitForSeconds(float) -> μΌμ μκ°λμ λκΈ°
- yield return break; -> μ½λ£¨ν΄ μ’ λ£
- yield return new WaitForEndOfFrame();
- λͺ¨λ μΉ΄λ©λΌμ GUIκ° λ λλ§μ μλ£ν, νλ μμ λ°λ‘ μ§μ μ λ€μ μ€ννλ€.
- νμ¬ νλ©΄μ μ μ₯νμ¬ νμ©ν νμκ° μμλ μ¬μ©ν μ μλ€.
- yield return new WaitForFixedUpdate();
- λ€μ FixedUpdate()κ° νΈμΆλ λκΉμ§ κΈ°λ€λ¦°λ€.
- yield return new WaitUntil(쑰건문);
- ν΄λΉ μ‘°κ±΄λ¬Έμ΄ trueκ° λ λκΉμ§ κΈ°λ€λ¦°λ€.
- 쑰건문μ Update ~ LateUpdate μ¬μ΄μ μ€νλμ΄μ§λ€.
- yield return new WaitWhile(쑰건문);
- ν΄λΉ μ‘°κ±΄λ¬Έμ΄ trueμΈ λμ κΈ°λ€λ¦°λ€
- 쑰건문μ Update ~ LateUpdate μ¬μ΄μ μ€νλλ€.
μ½λ£¨ν΄ μ¬μ©νκΈ°
//νΈμΆλ°©λ²
StartCoroutine(ParticleFadeOut());
StartCoroutine("ParticleFadeOut");
//μ€λ¨λ°©λ²
Coroutine particleCorutine;
particleCorutine = StartCoroutine(ParticleFadeOut());
StopCoroutine(particleCorutine);
- μ½λ£¨ν΄ νΈμΆμμλ, ν¨μλͺ μ νΈμΆνκ±°λ ν¨μλͺ μ StringμΌλ‘ νΈμΆνλ ννλ‘ μ μΈνλ€.
- μ½λ£¨ν΄ μ€μ§μμλ Corutine λ³μκ° νμνλ―λ‘, μ€λ¨ν νμκ° μμ κ²½μ° λ―Έλ¦¬ μ μΈνμ¬ μ½λ£¨ν΄ μμ μ μ μ₯ν΄λλ€.
μ½λ£¨ν΄ μ₯μ
- λμμ± νλ‘κ·Έλλ° μ§μ μ½λ£¨ν΄μ μ΄μ μ μμ μ μ€νμ΄ λ§μ§λ§μΌλ‘ μ€λ¨λμλ μ§μ λ€μμ μ₯μμμ μ€ν μ¬κ°
- νλ ₯ν λ©ν°νμ€νΉ νλ ₯μμ , μμΈ, μ΄λ²€νΈλ£¨ν, λ°λ³΅μ, 무νλͺ©λ‘ λ° νμ΄ν μ κ°μ μΉμν νλ‘κ·Έλ¨ κ΅¬μ± μμλ₯Ό ꡬννλλ° μ ν© StartCoroutine / StopCoroutineμΌλ‘ μμ, μ’ λ£λ₯Ό ν μ μμ΄ νμν κ²λ§ μλμν€κ³ λ μ μμ
- μ¬μ΄ λΉλκΈ° μ²λ¦¬ μ½νλ¦°μ ν΅ν΄ μ½κ³ κ°λ μ± μλ μ½λ μμ± κ°λ₯ λ°λ³΅λλ μ¬λ¬ κΈ°λ₯λ€μ΄ Updateμμ μμΌ νμ μμ΄ λ°λ‘ μ½λ£¨ν΄ λ³λ‘ κ΄λ¦¬ ν μ μμ΄μ κ΄λ¦¬κ° νΈν¨
μ½λ£¨ν΄ λ¨μ
- μ€ν¬λ¦½νΈκ° Disable λ λ μ½λ£¨ν΄λ κ°μ΄ μ’ λ£ μμΌμ£Όμ΄μΌ νλ λ²κ±°λ‘μμ΄ μμ
- μ νμ μΈ μ½λ μμ± λ°©μμμ λ²μ΄λκΈ° λλ¬Έμ λΉ λ₯Έ μ½λ ν΄μμ΄ μ΄λ €μ μ§ μ μμ
- μ°λ κΈ° λ©λͺ¨λ¦¬ (κ°λΉμ§)λ₯Ό μμ£Ό μμ±ν¨
ν΄κ²°λ°©μ
- 볡μ‘ν μ‘°κ±΄μ΄ νμ μμ΄ κ³μ μ¬μ©νλ λ°λ³΅ ν¨μλ κ΅³μ΄ μ½λ£¨ν΄ μ°μ§λ§κ³ Updateμ λ£μ
- λκ°μ 쑰건μΌλ‘ λ°λ³΅λλ μ½λ£¨ν΄μμ Waitλ¬Έμ κΌ μΊμ±ν΄μ μ¬μ©νμ
- μ½λ£¨ν΄μ μμλ‘ μμνκ³ μ’ λ£νλ μ§μ μ λ νμ§λ§μ
λ νΌλ°μ€
μ λν° μ½λ£¨ν΄ / Unity Coroutine
Unity Coroutine(μ½λ£¨ν΄)κ³Ό Update
[Android] μ½λ£¨ν΄ μ μ¨μΌνλκ°
'μ λν° > C# κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C# λΉλκΈ°μ μ°λ λ (1) | 2023.08.22 |
---|---|
C# λΉλκΈ° μ·¨μ (0) | 2023.08.22 |
C# λκΈ°/λΉλκΈ° (0) | 2023.08.22 |
onDrag?.Invoke(eventData); (0) | 2023.08.14 |
C# νλ‘κ·Έλλ° (0) | 2023.01.11 |