티스토리 뷰

오늘 예문은 아래와 같다.

public class Coffee : MonoBehaviour
{
    public float floorHeight;
    public float DropSpeed = 0.05f;

    void Start()
    {
        StartCoroutine(Drop());
    }

    IEnumerator Drop()
    {
        float t = 0.3f;

        while(t > 0 || transform.position.y > floorHeight)
        {
            transform.Translate(Vector2.down * DropSpeed);

            t -= Time.deltaTime;

            yield return null;
        }
        
        yield return null;
    }
}

오.. 이상한거 천지!! 일단 IEnumerator 가 눈에 띈다. 강사님 설명으로는 음 시간을 조절? 하기 위해 많이 쓰인다고 한다. 그리고 IEnumerator는 StartCoroutine()하고 같이 쓰인다는데 ㅋㅋㅋ 궁금.. 마지막에 yield return null은 또 뭐고

참고로 위의 코드는 물체가 일정 시간(0.3초) 동안 밑(y축 -방향)으로 낙하하는 코드이다.

그래서 찾아보았다!!!
궁금하니까 :)

근데 모르겠다 ㅠㅠㅠ....
일단 IEnumerator 는 yield 를 만나기 전까지 코드를 수행하고, 그 순서를 기억하고 있다가 다음 yield를 만날때 까지 도 수행한다고 한다 ㅋㅋㅋ .. 뮤ㅓ지

후훗...

일단 알아낸 특징은 음...

StartCoroutine은 프레임에 상관없는 별도의 시간으로 동작하고자 할 때 사용한다!!

일단 프레임(frame)의 정의부터 알아보면 프레임은 '함수 실행 한번'을 뜻한다. (이건 원래 동영상에서 나온 개념인데 멈춰있는 사진 한장을 뜻함) 60fps 이라고 하면 1초에 60번!

이런느낌, 저 사진한장이 프레임(frame)! 지금 1초에 24장이니까 24fps
코딩에서는 이 프레임을 '함수 호출'라고 표현하기도 하고 '작업을 수행' 한다고 표현하는 것을 보아서 함수가 실행되는 단위라고 생각된다.

저 위에는 안나와 있지만, 원래 Unity에서 Void Update () 라는 곳에 반복되는 함수를 넣는데, 기본적으로 Update 에서는 1초에 60번 함수를 실행한다 (ㄷㄷㄷ) 하지만 문제는 이 속도가 컴퓨터 사양에 따라 달라진다는 것이다!!!

그래서 똑같은 게임이라도 컴퓨터 사양에 따라 전혀 다른 게임 결과나 움직임이 나올 수 있다. (렉이랑은 좀 다른 개념인 듯..)

그래서 사용하는게 StartCoroutine!!
느낌을 표현하자면 이런느낌!!

싸우는 느낌이 아니라...
우리가 기차에 타면, 기타의 속도에 맞출수 밖에 없다 그게 Update!! 그래서 KTX를 타면 빠르게 가지만, 무궁화를 타면 느리게 가는 것이다.

하지만! Coroutine은 다르다. 왜냐면 Yield를 통해서 타이밍을 조절 할 수 있기 때문이다!! 우리가 걷고싶으면 걷고, 멈추고 싶을때 멈출 수 있는 것처럼 :)

끝.

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함
250x250