Menu
CoddyTech

카운트다운 타이머

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 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

챌린지

쉬움

주차 미터기가 결제한 시간을 카운트다운하도록 만드세요.

  1. Update()에서 timeLeft에서 Time.deltaTime을 빼되 0보다 낮아지지 않게 하고, Mathf.CeilToInt(timeLeft)를 분과 초로 표시하세요: 1:15.
  2. 스페이스바를 누르면 최대 maxTime(2:00)까지 30초가 추가됩니다.
  3. 0이 되면 Color.red로 EXPIRED를 표시하세요. 계속 그 상태로 유지되도록 Update()를 if (timeLeft == 0f) return;로 시작하세요.

‘플레이’를 누르고 동전을 넣어 보세요. 2:00에서 멈춥니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

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초가 추가됩니다
    }
}

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

직접 연습해 보세요: Unity 플레이그라운드