ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 9주차 5일 개인과제 진행 ( Coroutine )
    개발일지/스파르타 코딩클럽 부트캠프 2024. 6. 14. 20:48

     

    오늘 배운 내용


    코루틴의 다양한 활용법

     

    먼저 코루틴은 IEnumerator라는 반환형으로 시작해야하며, yield return이 반드시 함수 내부에 존재해야한다.

     

    yield return은 다음 함수가 실행될 때 까지의 텀을 반환한다고 생각하면 된다.

    예를 들어서

    Attack();
    yield return null;
    Attack();

    이런 식으로 함수 내부를 작성하면 Attack 메서드가 발생하고 바로 다음 프레임에 한번 더 발생한다.

    따라서 바로 실행시켜주려면 yield return null을 하면 된다. 그럼 텀을 주려면 어떻게 해야할까?

     

    Attack();
    yield return new WaitForSecond(3f);
    Attack();

    이렇게 하면 Attack 후 3초 뒤에 Attack이 발동된다.

     

    정리하면

     

    1. yield return null;  :  다음 프레임에 실행 됨.

    2. yield return new WaitForSeconds( float );  :  매개변수로 입력한 숫자에 해당하는 초만 큼 기다렸다가 실행됨.

    3. yield return new WaitForSecondsRealtime( flaot );  :  매개변수로 입력한 숫자에 해당하는 초만큼 기다렸다가 실행

     

    이 외에도 여러가지 있지만 일단은 이만큼만 알고 지나가자.

     

    2번과 3번의 차이는 2번은 유니티상의 시간을 기준으로 체크하고 3번은 현실 시간을 기준으로 체크한다.

     

    이렇게 Coroutine을 알아보다보면 정말 유용한 쓰임세가 많다.

     

    예를 들어

    IEnumerator FillCor(Image image, float duration)
        {
            image.fillAmount = 0f;
    
            for (float timer = 0; timer < duration; timer += Time.deltaTime)
            {
                float progress = timer / duration;
                image.fillAmount = progress;
                yield return null;
            }
    
            image.fillAmount = 1f;
        }

    이런 식으로 fillAmount를 자연스럽게 이미지가 채워지도록 할 수도 있다.

    UI의 애니메이션에서 유용하게 사용되는 모습이다.

     

    숫자, 텍스트를 조정하는데도 탁월한 효과를 보인다.

    IEnumerator StepCount(int _AddSub, float _Time, Text _Text)
        {
            float target = numb + _AddSub;
            float start = numb;
            numb = target;
            float value;
            float duration = _Time;
    
            for (float timer = 0; timer < duration; timer += Time.deltaTime)
            {
                float progress = timer / duration;
                value = Mathf.Lerp(start, target, progress);
    
                _Text.text = value.ToString("N2");
                yield return null;
            }
            //numb = target;
            _Text.text = target.ToString("N2");
        }
    
        public float numb;
    
        public void ClickBtn()
        {
            StartCoroutine(StepCount(10, 0.5f, text));
        }

    이런 식으로 코드를 작성하여

    버튼을 눌러서 ClickBtn 함수가 작동했을 때

    0.5초에 걸쳐서 10씩 숫자가 올라가게끔 만들 수도 있다.

     

    오늘은 유용한 코루틴 사용법을 맛봤다.

Designed by Tistory.