Unity/Unity(기초)

μœ λ‹ˆν‹° 코루틴 Coroutine

Rainbow🌈Coder 2021. 5. 19. 12:01
728x90

*개인 ν•™μŠ΅μ„ μœ„ν•œ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€.*

코루틴(Coroutine)

 

 

 

절차적 μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό 주고싢을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

<Update()λ¬Έ vs 코루틴(Coroutine)>

Update()문은 ν•œ ν”„λ ˆμž„μ— ν•œλ²ˆμ”© ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λΌλ©΄

(κ²Œμž„ ν”„λ ˆμž„ 1μ΄ˆμ— 60ν”„λ ˆμž„μ΄ λ‚˜μ˜¨λ‹€λ©΄ 1μ΄ˆμ— 60λ²ˆλ„λŠ” 격으둜 ν•œλ²ˆ λ„λŠ” 간격이 60λΆ„μ˜ 1초, 80fps라면 80번 호좜)

코루틴(Coroutine)은 μ—…λ°μ΄νŠΈλ¬Έ λ‚΄μ˜ λΈνƒ€νƒ€μž„ 적용 λŒ€μ‹ μ—

ν”„λ ˆμž„κ³Ό 상관없이 λ³„λ„μ˜ μ„œλΈŒ λ£¨ν‹΄μ—μ„œ μ›ν•˜λŠ” μž‘μ—…μ„ μ›ν•˜λŠ” μ‹œκ°„λ§ŒνΌ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ„€μ •κ°€λŠ₯ν•˜λ‹€.

이λ₯Όν…Œλ©΄, μ„œμ„œνžˆ 투λͺ…ν•΄μ§€λŠ” 효과λ₯Ό 주고싢을 λ•Œ updateλ¬Έ μ•ˆμ—μ„œ λ‘œμ§μ„ λ§Œλ“€λ©΄1μ΄ˆλ„ λ˜μ§€ μ•Šμ•„ 60ν”„λ ˆμž„ κ°€κΉŒμ΄ λ°˜λ³΅ν•˜κΈ° λ•Œλ¬Έμ— μˆœμ‹κ°„μ— 투λͺ…ν•΄μ§€λŠ” λΆˆμƒμ‚¬κ°€ μƒκΈ°λŠ”λ°μ΄λŸ΄λ•ŒλŠ” 코루틴을 μ‚¬μš©ν•˜λŠ” 것이 μœ λ¦¬ν•˜λ‹€.

 

 

<νŠΉμ§•>

- IEnumerator ν˜•μ‹μ„ λ°˜ν™˜κ°’μœΌλ‘œ 가짐

-  yield return ꡬ문을 μ–΄λ””μ—”κ°€ ν¬ν•¨ν•˜κ³  μžˆμ–΄μ•Ό 함.

- yield return 행은 싀행을 μ€‘μ§€ν•˜κ³  λ‹€μŒ ν”„λ ˆμž„μ—μ„œ 싀행을 μž¬κ°œν•  수 μžˆλŠ” 지점

- 코루틴을 μ‹€ν–‰ν•˜λ €λ©΄ StartCoroutine ν•¨μˆ˜λ₯Ό μ‚¬μš©

- 기본적으둜 코루틴은 yield ν•œ μ§ν›„μ˜ ν”„λ ˆμž„μ—μ„œ μž¬κ°œλ˜μ§€λ§Œ, μ§€μ—°ν–ˆλ‹€κ°€ λ‹€μ‹œ μ‹œμž‘ν•˜λ €λ©΄ WaitForSeconds ν•¨μˆ˜λ₯Ό μ‚¬μš©


<μ˜ˆμ œμ™€ ν•΄μ„€>

IEnumerator FadeOut() {
      Color color = spriteRenderer.color;
      while (color.a > 0.0f) {
         color.a -= 0.1f;
         spriteRenderer.color = color;
         yield return new WaitForSeconds(0.1f);//0.1초 λ™μ•ˆ μž μ‹œ 멈좰라
      }
   }
}
μœ„μ˜ μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ νŽ˜μ΄λ“œ 아웃 νš¨κ³ΌλŠ” 0.1μ΄ˆμ”© 10λ²ˆμ„ μˆ˜ν–‰ν•˜λ©° 1μ΄ˆλ™μ•ˆ μ‚¬λΌμ§€λŠ” 효과λ₯Ό 보여쀀닀.

이와같은 코루틴은 Update() ν•¨μˆ˜μ— 쒅속적이지 μ•ŠμœΌλ©° 마치 λ³„λ„μ˜ μ“°λ ˆλ“œμ™€ 같이 λ™μž‘ν•œλ‹€.


 

728x90