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())하면 될듯
잠깐 생각해보니 이게 변수 메모리도 안먹고 더 좋은거아님? 슈ㅏㅂㅁ