코루틴

서병수·2023년 8월 30일
0

유니티

목록 보기
2/2

엄청 쉬운 내용인데 조금 헷갈렸다.
먼저 IEnumerator는 반복문에 사용하는 인터페이스이다.

public interface IEnumerator
{
    object? Current { get; } // 현재요소 반환
    bool MoveNext(); // 다음 요소로 이동
    void Reset(); // 리스트 처음부터 반복
}

다음은 IEnumerator 인터페이스를 이용한 코드이다.

     internal class Program
        {
            static void Main(string[] args)
            {
                IEnumerator getNumberIEnumerator = GetNumberIEnumerator();
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
                getNumberIEnumerator.MoveNext();
                Console.WriteLine(getNumberIEnumerator.Current);
            }

           static IEnumerator GetNumberIEnumerator()
            {
                Console.WriteLine("IEnumerator : " + 1);
                yield return 1;
                Console.WriteLine("IEnumerator : " + 2);
                yield return 2;
                Console.WriteLine("IEnumerator : " + 3);
                yield return 3;
            }

        }

IEnumerator객체를 만들고나면 객체의 메서드를 이용하여 다음 return까지 이동한다.
그래서보면 첫번째 MoveNext();가 호출되면 IENumerator : 1이 써지고 그 다음줄엔 1이 써진다.
다음 MoveNext();가 호추로디면 IEnumeratorr : 2 이 써지고 그 다음줄엔 2가 써진다.
참고로 마지막 return에 도달하면 MoveNext();가 호출되어도 처음으로 돌아가지 않고 마지막 return값만 호출한다.따라서 위 코드의 예상되는 출력값은

IEnumerator : 1
1
IEnumerator : 2
2
IEnumerator : 3
3
3
3

이다.

이제 유니티에서 이를 활용하는 법을 알아보자.
먼저

StartCoroutine(HpAttack());
StartCoroutine("HpAttack");

이런식으로 호출한다.
매개 변수가 있다면

StartCoroutine( 메소드이름( 매개변수1, 매개변수2 ) );
StartCoroutine( "메소드이름", 매개변수 );

이렇게 호출한다.
HpAttack() 내부의 모습은 이렇다.

IEnumerator HpAttack()
{
	yield return new WaitForSeconds( 2.0f );
    
    Hp -= 10;
}
profile
안녕하십니까 인사올립니다

0개의 댓글