보통 함수는 하나의 프레임내에서 명령이 실행되게 하는데, 여러 프레임에 걸쳐서 코드를 실행시키기 위한 함수가 코루틴(Coroutine)입니다.
쓰레드와 비슷하다고 느낄 수 있지만 비동기가 아니기 때문에 쓰레드는 아닙니다.
대체로 Update함수를 이용해서 구현할 수 있지만, 코루틴을 사용해야하는 이유는 작업을 나눠서 수행할 수 있고, 불필요한 작업들이
Update문에서 계속 실행되는 것을 방지할 수 있습니다.
형식
함수를 정의한 후 StartCoroutine(코루틴함수)로 실행을 합니다.
코루틴 함수는 IEnumerator의 반환형을 가집니다.
예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
GameObject goSprite;
SpriteRenderer spriteRenderer;
float m_fAlpha = 0f;
void Start()
{
goSprite = GameObject.Find("Sprite");
spriteRenderer = goSprite.GetComponent<SpriteRenderer>();
spriteRenderer.color = new Color(0, 0, 0, 0);
StartCoroutine ("Fade");
}
void Update()
{
}
IEnumerator Fade()
{
for(int i = 0; i < 10; i++)
{
m_fAlpha += 0.1f;
spriteRenderer.color = new Color(0, 0, 0, m_fAlpha );
yield return new WaitForSeconds(1f);
}
}
}
|
Sprite Object의 알파수치를 변경하는 예제입니다.
IEnumerator Fade() 함수를 생성해주고, StartCoroutine을 통해 시작하도록 했습니다.
yield return new WaitForSeconds(1f); 이 코드는 1초를 대기하라는 의미입니다.
yield 키워드의 종류는 다음과 같습니다.
yield return null
yield return new WaitForSeconds(float second) - 주어진 시간(초)동안, co-routine의 수행을 중단합니다.
yield return new WaitForFixedUpdate() - 다음 고정 프레임 업데이트 함수(fixed frame rate update)가 호출될 때까지 기다립니다.
yield return new WaitForEndOfFrame() - 화면에 컨텐츠를 보여주는 프레임 바로 직전에, 모든 카메라와 GUI가 렌더링을 완료하는 프레임의 마지막을 기다립니다.
yield return StartCoRoutine(string) - 다른 코루틴이 끝날 때까지 기다립니다.
yield return new WWW() - 웹 통신 작업이 끝날 때까지 기다립니다.
yield return new AsyncOperation - 비동기 작업이 끝날때까지 기다립니다.
코루틴이 진행중에도 StopCoroutine(함수명)을 입력한다면 정지시킬 수 있습니다.
방금 사용한 StartCoroutine ("Fade"); 이렇게 스트링으로 함수명을 넣을 수도 있지만,
직접 함수를 StartCoroutine (Fade());로 코드를 작성할 수 있습니다.
그리고 함수에 매개변수를 넣어서 표현도 가능합니다.
StartCoroutine (Fade(0.1f));
IEnumerator Fade(float fAlphaPlus)
{
for(int i = 0; i < 10; i++)
{
m_fAlpha += fAlphaPlus;
spriteRenderer.color = new Color(0, 0, 0, m_fAlpha );
yield return new WaitForSeconds(1f);
}
}
'개발공부 > 유니티' 카테고리의 다른 글
[Unity] 유니티에서 해상도 설정 (0) | 2019.10.26 |
---|---|
[Unity] 유니티 Invoke, InvokeRepeating, CancelInvoke (0) | 2019.10.25 |
[Unity] 유니티 점프 (0) | 2019.10.11 |
[Unity] 오브젝트를 키보드 이동 (0) | 2019.10.08 |
[Unity] 유니티 마우스 클릭 객체 이동 (0) | 2019.10.07 |