KhjCoroutines - AlphaChange

2014. 7. 29. 16:22프로그래밍/Coroutine

반응형
SMALL

이 게시판에서는 기본적인 동작을 가진 코루틴들을 하나씩 만들어보겠습니다.

 

NGUI 와 애니메이션으로도 충분히 처리 가능한 로직들이지만, 

코루틴을 모아서 스크립트로 구현해두고 때에 따라 불러서 사용하면

어떤 프로젝트를 진행하든 자신에 손에 익은 로직으로 구현할수 있는 훌륭한 자산이 될수 있습니다. 

 

개인적으로 애니매이션은 하나의 애니메이션만 동작시킬수 있고,

때에 따라서는 지정된 값이 아닌, 변수값으로 위치정보 등을 받아와야 할 경우 활용이 애매했던 경험이 있습니다.

 

코루틴은 동작마다 구분지어 놓으면 각자의 코루틴의 제역할을 해냅니다.

물론 퍼포먼스의 속도나 메모리사용에 관한 점에 대해서는 다른 관점이 있을수 있겠습니다.

 

다만 코루틴 퍼포먼스가 생각만큼 느리지 않고, 효율적인 면이 있다는 것은 다음에 기회가 되면 이야기해보기로...

 

 

 

<내용>

//알파값 변환하는 코루틴을 만들어봅시다

//totalTime기간동안 img의 알파를 crescendo면 0->1 반대는 1->0으로 조정해준다

 

일단 바로 전 글의 코루틴 기본형에서 시작해서 하고싶은 작업 부분에 img의 alpha값을 세팅해주는 로직만 추가해보았습니다.

 

public IEnumerator AlphaChange(UISprite img, bool crescendo, float totalTime )
{
    yield return new WaitForEndOfFrame();
    float elapseTime = 0f;
    while(elapseTime < totalTime)
    {
         elapseTime +=Time.deltaTime;
         if(elapseTime >= totalTime) elapseTime = totalTime;
   
         if(crescendo)  img.alpha =  elapseTime/totalTime;
         else    img.alpha =  1f - elapseTime/totalTime;
   
         yield return new WaitForEndOfFrame();
    }
}

 

토탈타임동안 이미지의 알파를 변경해주고( 리턴값이 WaitForEndOfFrame이므로 프레임단위로 동작할것입니다. )

시간이 지나면 문장이 끝나므로 코루틴도 종료됩니다.

 

간단하게 알파를 변경하는 코루틴이 생성되었습니다.

저는 제 이름을 따서 KhjCoroutines 라고 스크립트 명을 짓고, 스크립트를 싱글턴 지정하였습니다.

public static KhjCoroutines Instance;

void Awake()

{
    Instance = this;
}

 

이것으로 작업하는 프로젝트 어디서든지

StartCoroutine( KhjCoroutines.Instance.AlphaChange( img, true, 1f ) );

 

와 같은 형식으로 알파변환 코루틴을 호출할 수 있게 되었습니다.

이렇게 차근차근 하나씩 동작을 만들어두면 간단한 어플 제작시에는 매우 유용하게 활용하실 수 있습니다.

 

다음엔 다른 동작으로 또 구현해보고 ,점점 심화하여 코루틴을 만들어 보도록 하겠습니다.

감사합니다.

 

 

 

 

//추가사항 //위 코루틴의 패널버전으로 오버로딩

public IEnumerator AlphaChange(UIPanel imgPanel, bool crescendo, float totalTime )
{
        yield return new WaitForEndOfFrame();
        float elapseTime = 0f;
        while(elapseTime < totalTime)
    {
         elapseTime +=Time.deltaTime;
         if(elapseTime >= totalTime) elapseTime = totalTime;
   
         if(crescendo)  imgPanel.alpha =  elapseTime/totalTime;
         else    imgPanel.alpha =  1f - elapseTime/totalTime;
   
         yield return new WaitForEndOfFrame();
    }

}

반응형
LIST

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

KhjCoroutines - AniSprite  (0) 2014.08.25
KhjCoroutines - DownMove  (0) 2014.07.31
KhjCoroutines - AlphaOnOffLoop  (0) 2014.07.31
KhjCoroutines - ScaleChange  (0) 2014.07.30
코루틴 기본형태  (0) 2014.07.02