2016. 11. 27. 13:46

class Outer

{

private Inner _innerClass;


IEnumerator Start()

{

_innerClass.Init();

yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);

}



class Inner

{

public IEnumerator InnerEnumerator;


public void Init()

{

InnerEnumerator = DirectionSyquence();

}


IEnumerator DirectionSyquence()

{

...

yield return null;//1

...

yield return null;//2

...

yield return null;//3

}

}

}



위와 같은 경우 StartCoroutine(_innerClass.InnerEnumerator);가 한번만 호출됨


각각 호출할때마다 _innerClass.Init();을 통해서 _innerClass.InnerEnumerator를 다시 할당해줘야하는데,


아마도 IEnumerator가 반복기니까 변수로 저장되면 내부에 들어있는 iterator블럭을 다 반복하면 그 마지막 상태로 저장되기 때문인듯


즉,  Start()에서 첫번째 yield return StartCoroutine(_innerClass.InnerEnumerator);을 호출했을때 

DirectionSyquence의 세번째 yield return null까지 반복한 상태가 InnerEnumerator변수에 기록된거고

그 뒤로는 암만 StartCoroutine으로 반복기 돌려봤자 저 InnerEnumerator변수에는 등록된 IEnumerator의 iterator블럭을 다 돌렸기 때문에 돌아갈 로직이 없는것인듯함.


때문에 각각 호출시마다 변수에 IEnumerator함수(이걸 함수라고 해야하나 뭐라고하나)를 재등록해줘야 첫 iterator블럭부터 다시 돌아가게됨.


이게 아니면 DirectionSyquence를 그냥 public으로 돌려서 StartCoroutine(_innerClass.DirectionSyquence())하면 될듯


잠깐 생각해보니 이게 변수 메모리도 안먹고 더 좋은거아님? 슈ㅏㅂㅁ

Posted by 반얀