Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- 단계별로 풀어보기
- csharp
- 포토샵
- 코딩테스트
- 3d모델링
- c언어
- 단계별문제풀이
- 카드뉴스
- 비트연산
- boj
- 자바스크립트
- 3D그래픽
- 3d스터디
- 블렌더
- AI
- 백준
- CS
- blender4.0
- 파이썬
- leetcode
- blender
- 블렌더튜토리얼
- cs기초
- 프로그래머스
- level1
- Python
- 알고리즘
- 도넛튜토리얼
- Photoshop
- 블렌더도넛
Archives
- Today
- Total
슬로우도파민
유니티에서 시간 측정하기 1 - 엔진 내부 시계 사용 본문
1. Update()와 Time.deltaTime
매 프레임마다 이전 프레임부터 현재 프레임까지 걸린 시간(Time.deltaTime)을 누적하거나 빼서 타이머를 만듭니다.
화면에 남은 시간을 실시간으로 보여주는 UI(카운트다운)를 만들 때 가장 많이 사용됩니다.
using UnityEngine;
public class UpdateTimer : MonoBehaviour
{
public float timeLeft = 10.0f; // 10초 카운트 다운
void Update()
{
if (timeLeft > 0)
{
timeLeft -= Time.deltaTime; // 매 프레임마다 시간을 뺌
// 예: timerText.text = Mathf.Round(timeLeft).ToString();
}
else
{
Debug.Log("타이머 종료!");
timeLeft -= 0; // 음수로 내려가지 않게 고정
}
}
}
팁: 게임이 일시 정지(Time.timeScale = 0;)되었을 때 타이머도 멈추게 하려면
Time.deltaTime 을 쓰고, 일시 정지와 무관하게 실제 시간을 계속 측정해야 한다면
Time.unscaledDeltaTime 을 사용하세요.
2. 코루틴 (Coroutine)
특정 시간동안 대기했다가 다음 코드를 실행해야할 때 매우 유용합니다. 복잡한 상태를 관리하지 않고도 직관적인 코드 작성이 가능하여 스킬 쿨타임, 몬스터 스폰 주기, 일정 시간 후 오브젝트 파괴 등에 자주 쓰입니다.
using System.Collections;
using UnityEngine;
public class CoroutineTimer : MonoBehaviour
{
void Start()
{
StartCoroutine(TimerRoutine());
}
IEnumerator TimerRoutine()
{
Debug.Log("타이머 시작!");
// 정확히 5초를 대기합니다.
yield return new WaitForSeconds(5.0f);
Debug.Log("5초 경과!");
}
}
3. Time.time 을 이용한 타임스탬프 방식
시작 시점의 시간을 기록해두고, 현재 시간(Time.time)에서 시작 시간을 빼서 경과된 시간을 측정합니다.
매 프레임 연산을 할 필요가 없어 플레이어가 레벨을 클리어하는 데 걸린 전체 시간이나 레이싱 게임의 랩 타임을 측정할 때 효율적입니다.
using UnityEngine;
public class TimestampTimer : MonoBehaviour
{
private float startTime;
private bool isTiming = false;
public void StartRace()
{
startTime = Time.time; // 시작 시간 기록
isTiming = true;
}
public void EndRace()
{
if (isTiming)
{
float timeTaken = Time.time - startTime;
Debug.Log($"클리어 타임 : {timeTaken}초");
isTiming = false;
}
}
}
4. Invoke (가장 간단한 지연 실행)
특정 함수를 몇 초 뒤에 실행하라고 예약하는 기능입니다. 매개변수(파라미터)를 넘길 수 없다는 단점이 있지만 코드가 가장 짧습니다.
using UnityEngine;
public class InvokeExample : MonoBehaviour
{
void Start()
{
// 3초 뒤에 "Explode" 함수를 실행
Invoke("Explode", 3.0f);
}
void Explode()
{
Debug.Log("펑!");
}
}'개발기록 > Unity 유니티' 카테고리의 다른 글
| 벡터 내적 활용 : 몬스터가 캐릭터 시야에 있는지 확인하기(Field of View) (0) | 2026.01.03 |
|---|---|
| [2D-Platformer] 3. 점프 구현하기 (Jump) (0) | 2025.12.27 |
| [2D Platformer] 2. 사다리 로직 구현 (Climbing Ladder) (0) | 2025.12.26 |
| [2D Platformer] 1. START & 좌우 이동 구현 (0) | 2025.12.22 |
| 유니티에서 Oculus Meta Quest3 빌드하기 (1) | 2024.02.14 |
