Menu
CoddyTech

카운트다운 타이머

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 4번째.

카운트다운은 남은 시간을 float에 저장하고 매 프레임마다 Time.deltaTime만큼 빼요. 마지막 프레임에서 정확히 0이 되는 경우는 드물기 때문에 Mathf.Max로 0에서 멈추게 하고, 종료 처리는 한 번만 해야 해요. 이 도화선은 플레이어에게 폭탄을 해체할 5초를 줘요:

public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;

void Update()
{
    if (exploded)
    {
        return;
    }

    fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
    fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);

    if (fuse == 0f)
    {
        exploded = true;
        fuseText.text = "BOOM";
        fuseText.color = Color.red;
    }
}

Mathf.CeilToInt는 올림을 하는데, 카운트다운에 적합한 방식이에요. 첫 1초 동안은 계속 5(4.99를 올림하면 5), 마지막 1초 동안은 1을 표시하고, 시간이 다 됐을 때만 0을 표시해요. (int)fuse를 사용하면 4.99가 4로 버려지고 폭탄이 여전히 작동하는 마지막 1초 내내 0을 표시해요. Mathf.RoundToInt를 사용하면 마지막 0.5초 동안 0을 표시해요. 분과 초로 표시하는 더 긴 카운트다운도 같은 규칙을 따라요. 먼저 시간을 초 단위 정수로 올림한 다음 그 값을 형식에 맞게 표시하세요.

앞부분의 return은 화면에 BOOM이 계속 표시되게 해요. 이 코드가 없으면 다음 프레임에 Fuse: 0이 그 위에 표시돼요. 텍스트에는 색상도 있어서 fuseText.color = Color.red를 사용하면 빨간색으로 바뀌어요.

challenge icon

챌린지

쉬움

주차 미터기는 결제된 시간을 카운트다운합니다. ParkingMeter.cs에서 Update()를 작성하세요(장면에서 meterText를 연결합니다):

  • timeLeft는 75초부터 시작하며(Inspector에서 설정) 매 프레임 감소하고, 절대 0보다 작아지지 않습니다.
  • meterText에는 남은 시간이 분과 초로 표시되며, 초 단위로 올림합니다. 75초부터 74.01초까지는 1:15가 표시되고, 0.4초가 남았을 때는 0:01이 표시됩니다.
  • Space 키를 누르면 동전을 넣습니다. 시간이 30초 늘어나지만, maxTime(120초, 2:00으로 표시됨)을 초과하지 않습니다.
  • 0초가 되면 텍스트가 빨간색(Color.red)으로 EXPIRED라고 표시됩니다. 그때부터 미터기는 0에 머무르고, 동전을 더 넣을 수 없습니다.

Play를 누르고 동전을 몇 개 넣은 다음 Check를 누르세요.

직접 해보기

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // timeLeft를 카운트다운하고 분과 초로 표시합니다. Space를 누르면 30초가 추가됩니다
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

실제 게임 만들기의 모든 레슨