Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

Mini Rooms

  • 내 미니룸
  • 미니미설정
  • 미니룸설정
  • 답글수 [0]

What Friends Say

한마디로 표현해봐~

1촌평 관리

[Day 21] Suika Game Tutorial 5

GamJia 2024. 11. 27. 21:35

오블완 챌린지 21일차


오늘 블로그 챌린지 마지막 날에

첫눈까지 와서 너무 신난

GamJia 입니다

 

오늘 드디어 블로그 챌린지의

마지막 날입니다!


 

오늘 점심시간에 만든 눈사람과 함께

블로그 챌린지 마지막 날을

축하하겠습니다!

 


 

일단 카운트 다운을 표시해줄

Text과 GameOver 영역을

추가해주겠습니다


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

namespace SuikaGame
{
    public class GameOver : MonoBehaviour
    {
        [SerializeField] private TMP_Text countdownText; // 카운트다운을 표시할 TextMeshPro
        [SerializeField] private GameObject gameOver; // GameOver 화면

        private List<GameObject> fruits = new List<GameObject>(); // 트리거된 객체 리스트
        private Coroutine countdownCoroutine; // 카운트다운 코루틴
        private bool isCoroutine = false; // 코루틴 상태 확인용

        void Start()
        {
            countdownText.gameObject.SetActive(false); 
        }

        private void OnTriggerEnter2D(Collider2D other)
        {
            if (!fruits.Contains(other.gameObject))
            {
                fruits.Add(other.gameObject);

                // 리스트 길이가 1 이상이면 카운트다운 시작
                if (fruits.Count > 0 && !isCoroutine)
                {
                    countdownCoroutine = StartCoroutine(StartCountdown());
                    isCoroutine = true;
                }
            }
        }

        private void OnTriggerExit2D(Collider2D other)
        {
            if (fruits.Contains(other.gameObject))
            {
                fruits.Remove(other.gameObject);

                // 리스트가 비면 카운트다운 중지 및 초기화
                if (fruits.Count == 0)
                {
                    if (countdownCoroutine != null)
                    {
                        StopCoroutine(countdownCoroutine);
                        countdownCoroutine = null;
                        isCoroutine = false;
                    }
                    countdownText.gameObject.SetActive(false); // UI 비활성화
                }
            }
        }

        private IEnumerator StartCountdown()
        {
            yield return new WaitForSeconds(2f);
            
            float timeRemaining = 5f;
            countdownText.gameObject.SetActive(true);

            while (timeRemaining > 0)
            {
                countdownText.text = Mathf.Ceil(timeRemaining).ToString(); // 남은 시간을 UI에 표시
                timeRemaining -= Time.deltaTime;
                yield return null;
            }

            // 카운트다운 완료 시 GameOver UI 활성화
            gameOver.SetActive(true);
            countdownText.gameObject.SetActive(false); // UI 비활성화
        }

    
    }
}

 

코드의 설명은 다음과 같습니다

Method 설명
OnTriggerEnter2D
  • 들어온 객체가 리스트(fruits)에 없으면 추가.
  • 리스트에 하나 이상의 객체가 있고, 카운트다운이 시작되지 않은 상태라면 카운트다운 시작.
OnTriggerExit2D
  • 영역을 벗어난 객체는 리스트에서 제거.
  • 리스트가 비면 카운트다운 중단 및 초기화.
StartCountDown(coroutine)
  • 2초 대기5초 동안 카운트다운을 표시.
  • 시간이 끝나면 Game Over UI 활성화 및 카운트다운 텍스트 비활성화.

 

countDownText에는 방금 만든 text

gameOver에는 어제 작업한 GameOver창을

연결해주도록 하겠습니다

 


 

원래는 게임오버 영역이

위에 있었는데 스겜을 위해

잠시 밑으로 내렸습니다!

 

게임 오버, 타이머, 게임 재시작까지

잘 진행되는 모습입니다

 


 

블로그 챌린지는 여기까지 하고

GitHub에 Commit하는걸로

마무리 하겠습니다!

길다면 길고, 짧다면 짧은

3주가 정말 금방 지나갔네요

다음에 더 재밌는 블로그

챌린지로 돌아오도록 하겠습니다!

 

 

감사합니다!!
 


 

'Challenge' 카테고리의 다른 글

티스토리 연말 결산 캘린더(12월 19일)  (0) 2024.11.28
[Day 20] Suika Game Tutorial 4  (0) 2024.11.26
[Day 19] Suika Game Tutorial 3  (0) 2024.11.25
[Day 18] Suika Game Tutorial 2  (0) 2024.11.24
[Day 17] Suika Game Tutorial 1  (1) 2024.11.23