ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023.12.26
    TIL 2023. 12. 26. 20:48

    오늘은 특별하게 TIL 적는 방법에 대한 강의가 있었습니다.

    결론은 정답은 없다!

    꾸준히 적다보면 스스로 욕심이 나서 더 잘 쓰게 되어있다라고 하시더라구요.

    아직은 지금 TIL에서 더 성장된 모습이 그려지지는 않는데 꾸준히 적다보면 성장할 것이라는 믿음으로 꾸준히 적어보려합니다.


     

    우선 제가 해야할 부분에 대한 코드는 저번주에 완성을 해둔 상태였습니다.

    오늘은 따로 코드를 안적으려고 했는데 팀원들끼리 코드 합치는 과정에서 한 팀원분께서 코드를 정리해주시겠다고 하셨어요.

    그래서 오늘은 정리된 코드 확인해봤습니다.

    새로운 함수를 만드셔서 만들어서 그런건지 제가 한거랑 좀 많이 다르게 느껴지더라구요. 그래도 한 줄씩 차근차근 읽어보니깐 제가 생각해둔 것들이 녹아 있는 것 같았습니다.

     

    IEnumerator SingleCardTimeRunCo() //카드 하나만 골랐을때 타이머
    {
        isSingleCardSelect = true;
        float time = setTime;
        countTime.SetActive(true);
        
        while(secondCard == null)
        {
            countTimeText.text = time.ToString("N0");
            if (time <= 0)
            {
                firstCard.GetComponent<Card>().CloseCard();
                matchCardReset();
                countTime.SetActive(false);
                break;
            }
            time -= Time.deltaTime;
            yield return null;
        }
    
        isSingleCardSelect = false;
    }

     

    첫번째 카드를 선택하고 5초 동안 다음 카드를 고르지 않을 경우 첫번째 카드를 뒤집도록 만든 코드입니다.

    제가 만든 코드는 Update에 if문을 이용해서 firstCard != null && secondCard == null 일 때 실행되도록 만들었습니다.

    팀원분께서는 첫번째 카드를 고를 경우 isSingleCardSelect를 true로 설정하셔서 if문에 secondCard == null일 경우만 조건으로 하셨습니다.

    그리고 첫번째 카드를 고르고 몇 초동안 고르지 않으면 뒤집도록 만들 때 정해진 시간을 좀 더 쉽게 파악하기 위해서 새로운 변수를 생성하셔서 관리하기 쉽게 만드셨다고 하셨습니다.

    처음에 만드신 것을 수행했을 때에는 제대로 실행이 되지 않았는데 이유는 제가 Update부분 외에 함수 중에서 setTime을 초기화시켜주기 위해서 setTime = 5;를 적어둔 곳들이 있기 때문이였습니다. 그 부분들을 지워주니깐 제대로 작동하게 되었습니다.

     

    matchCardReset();은 첫번째 카드를 다시 뒤집어주고 난 후에 다음 카드를 선택했을 때 그 카드가 첫번째 카드에 들어갈 수 있도록 설정해준 함수입니다.

    카드 생성에는 제가 건들인게 없기 때문에 함수를 새로 만드신 뒤에 제가 다시 고칠 때 어리둥절했었는데요. 첫번째 카드를 선택하면 bool 변수가 true가 되고 두번째 카드를 선택하면 다른 bool 변수가 true가 되면서 두 카드가 모두 선택되었다는 뜻이 되고 두 카드의 이미지 매칭이 시작됩니다. 그래서 초기화 부분에 두 bool 변수를 false로 바꿔주는 것이 있습니다.

    코드를 제가 만든게 아니기 때문에 따로 올리지는 않지만 이렇게 생각할 수도 있다. 라는 의미로 한번 적어봤습니다.

     

    IEnumerator

    함수를 만들 때 return 값이 있으면 값에 맞는 타입을 앞에 적어주었고 그렇지 않으면 void를 이용해서 만들었습니다.

    IEnumerator은 새로운 함수 형태라고 볼 수 있습니다.

    안 배운 부분이긴 함.

    코루틴(Coroutine)이라고 하는 것의 일종이며, 코루틴은 함수를 실행할 때 잠깐의 시간을 줄 수 있다. 라고하는데 Invoke 처럼 한 함수를 실행하기 전에 몇초의 실행이 되지 않게 만드는 타이밍을 넣을 수 있고, InvokeReapting처럼 반복을 할 수도 있습니다. 그렇다면 왜 Invoke를 사용하지 않고 코루틴을 사용하는걸까라는 의문이 들 수 있습니다.

    Invoke는 간단한 함수를 간단하게 실행하기 위해서 사용되는 경우에 많이 사용하고 코루틴은 좀 더 복잡한 함수를 내가 원하는 다양한 타이밍에 실행할 수 있게 만들어줍니다.

    yield return

    이 친구가 다양한 타이밍에 실행할 수 있도록 설정해줍니다.

    Invoke 함수는 몇초 뒤에 실행한다라면, yield return은 프레임 단위, 웹 통신이 끝나고, 다른 코루틴 끝나고 등 다양하게 설정할 수 있습니다.

    또한 Update에 내용을 넣지 않아도 yield return null을 넣으면 프레임 단위로 실행이 된다고 합니다. 근데 update에 함수명을 넣어야지 실행되더라구요. 정확한건지는 모르겠습니다.


     

    카드 매칭 시 팀원들 소개 카드가 보인거나 실패 카드가 보이는 것은 새로운 함수를 만들어서 넣으신거지 코드의 변화가 딱히 없어서 따로 적지는 않았습니다.

    이 부분의 경우도 계속 반복되는 함수이다 보니 IEnumerator을 사용하셔서 만들어주셨습니다.

    사실 아직까지는 void랑 큰 차이를 느끼지는 못했습니다. void 함수를 만들어서 update 안에 넣는게 지금 배운 것으로는 편하다고 느껴지기는 하는데 아무래도 update 안에 많은 함수가 들어가게 되면 복잡해지고 어떤 부분이 어떻게 바뀌는지 확실하게 보기 힘들어서 그렇다고도 생각됩니다.

    IEnumerator을 사용해서 게임이 플레이될 때 시간을 흐르게하는 함수 안에 특정한 조건에서 함수를 사용할 수 있게 설정을 해두셨는데 (runtime 함수 안에 시간이 0초가 되면 멈추게하는 함수, 시간이 얼마 남지 않으면 시간 Text를 깜박거리게 하는 함수, 특정 조건일 때 발동되는 함수 등을 넣으셨습니다.) void 함수였다면 불가능했을까 라는 의문이 생기네요. 다 끝나고 발표까지 한 다음에 한번 수정해서 확인해볼까 합니다.

     

    'TIL' 카테고리의 다른 글

    2023.12.29 - 주석 단축키, 조건문, 배열, 컬렉션  (1) 2023.12.29
    2023.12.28  (0) 2023.12.28
    2023.12.27  (1) 2023.12.27
    2023.12.22  (1) 2023.12.22
    2023.12.21  (0) 2023.12.21
Designed by Tistory.