KhjCoroutines - AniSprite

2014. 8. 25. 11:37프로그래밍/Coroutine

반응형
SMALL

이번엔 코루틴으로 스프라이트 애니메이션을 구현해 보려고 합니다.

스프라이트 이미지의 이름이

 

"name_번호"(프레임 인덱스는 0부터 시작) 이라는 전제로 만들어 보겠습니다.

 

//내용

1. 시작프레임에서 종료프레임까지 스프라이트 이미지를 일정간격으로 변경하여 애니메이션 합니다.

2. 프레임 종료후, 적용시킬 애니메이션 동작이 구현되어 있다면 설정합니다.

2. 종료후에 처음 이미지로 지정한 시간후에 초기화 시킵니다.

 

 

public IEnumerator AniSprite(UISprite img, string name, float frameSpeed, int startFrame, int endFrame, bool init = true, float initTimer = 3f, string endAnimation = null )
{
  yield return new WaitForEndOfFrame();

  float frameTime = frameSpeed;
  int spriteNum = startFrame;

  while( spriteNum < endFrame )
  {
       frameTime -= Time.deltaTime;
       if(frameTime <= 0f )
       {
            ++spriteNum;
            frameTime = frameSpeed;
            img.spriteName = name + spriteNum;
        }
       yield return new WaitForEndOfFrame();
  }

 

  if( endAnimation != null && !endAnimation.Equals("") )
  {
       img.animation.Play(endAnimation);
  }

 

  if(init)
  {
       frameTime = initTimer;
       while (frameTime > 0f)
       {
            frameTime -= Time.deltaTime;
            if(frameTime <= 0f )
            {
                 img.spriteName = name + "0";
            }
            yield return new WaitForEndOfFrame();
       }
   }

}

 

 

지난번 DownMove 코루틴에서 본 것처럼 여기서도 최종 종료후에 init을 시켜주는 구문이 있습니다.

(코루틴 종료 후의 초기화 가능)

 

여기서 눈여결 볼 것은 빨간색 부분의 앤드 애니메이션입니다.

코루틴 종료와 초기화 사이에 이 부분은 , 코루틴 종료 후에 다른 함수나 애니메이션 동작 등을 호출할 수 있다는 것을 의미합니다.

이것은 코루틴 하나를 호출하는 것으로 추가적으로 다른 코루틴 혹은 함수, 애니메이션 등을 불러오는 연쇄작용이 가능하다는 것입니다.

 

도미노의 시작 공을 굴리면 연쇄적으로 도미노가 넘어지듯,

코루틴 하나의 호출이 도미노의 시작 공처럼 되어

프로세스가 자연스럽게 흘러가도록 설계가 가능하다는 뜻입니다.

 

이점을 잘 활용한다면 프로그램 연출이 풍부해 질 것이라고 생각합니다.

 

다음시간에 스프라이트 애니메이션을 조금 더 심화하여 응용해보도록 하겠습니다.

 

 

반응형
LIST

'프로그래밍 > Coroutine' 카테고리의 다른 글

StopCoroutine() 의 활용 2 - Coroutine continue failure  (3) 2015.10.14
StopCoroutine() 의 활용  (0) 2015.06.16
KhjCoroutines - DownMove  (0) 2014.07.31
KhjCoroutines - AlphaOnOffLoop  (0) 2014.07.31
KhjCoroutines - ScaleChange  (0) 2014.07.30