과제

[Unity,C#] 메타버스 제작 과제 3일차

leejiyoung0511 2025. 2. 19. 22:11

● 오늘 할일

  • 뽑기
  • 미니게임 추가
  • 미니게임 보상
  • 탑승물
  • NPC추가

● 오늘의 트러블 슈팅

 

#1 코루틴 문제

 

뽑기를 구현하다가 한번 뽑기가 한번이 아닌 중복으로 되는 문제를 발견했다.

코루틴 안에서 뽑기 결과 리스트가 반환이 되고 나서 뽑기 결과 씬으로 넘어가고 싶었기 때문에

아래와 같은 코드를 작성했다.

            while (true)
            {
                yield return GetGachaRewards(count);
                //뽑기 쿠폰 사용
                m_GachaCoupon.Use(count);
                //뽑기 결과 씬으로 이동
                LoadScene("GachaResult", m_GachaRewards);
            }

 

원인을 찾아보니 yield return는 IEnumerator만 반환 가능하기 때문이었다.

GetGachaRewards()는 리스트를 반환하고 있었고 이 코드 대로라면 즉시 반환이 되므로 반복문이 빠르게 실행

그 결과 중복된 뽑기 보상이 계속 추가 되는거였다.

 

방법은 여러가지 있지만 ( GetGachaRewards를 IEnumerator변경 등)

나는 중복 방지로 bool값을 선언해서 한번밖에 실행이 안되도록 수정하였다.

            bool isGacha = false;

            while (true)
            {
                //isGacha가 false될때까지 대기
                yield return new WaitUntil(() => !isGacha);
                // true로 하면서 한번만 실행
                isGacha = true;
                m_GachaCoupon.Use(count);
                GetGachaRewards(count);
                LoadScene("GachaResult", m_GachaRewards);
            }

 

중복 없이 1번도 10번 뽑기도 잘 작동 하였다!

 

▼ 해결 영상