유니티 버전 - 2022.3.17f1
목차
- 들어가며
- using System 지시문
- DateTime
- 시간 관련 유용한 메서드
- 마치며
들어가며
System 네임스페이스를 정의하고 그 안의 클래스와 메서드들을 이용하여 시간 관련 유용한 기능들을 알아보겠습니다
DateTime
날짜나 시간 정보를 저장하는 데 특화된 구조체 입니다, 연도, 월, 일, 시, 분, 초 등 다양한 정보를 담고 있습니다
먼저 DateTime변수를 선언하고 현재의 날짜와 시간을 출력하여보겠습니다
using System;
public class Test : MonoBehaviour
{
private DateTime dateTime;
private void Start()
{
dateTime = DateTime.Now;
Debug.Log(dateTime);
}
}
결과를 보니 현재 날짜와 시간이 잘 출력되었습니다, 하지만 읽기 불편한 방식으로 출력되어있기에, 포맷을 설정하여 주겠습니다
using System;
using UnityEngine;
public class Test : MonoBehaviour
{
private DateTime dateTime;
private void Start()
{
dateTime = DateTime.Now;
Debug.Log(dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
포맷을 지정해주어 연도/월/일/ 시간 순서대로 나올 수 있게 해주었습니다
코드를 보면 yyyy 혹은 MM처럼 형식을 지정해주는 것을 볼 수 있습니다, 엑셀을 사용할때 자주 바꾸어주던 기억이 나는데 저렇게 사용자 지정 날짜 및 시간 형식을 이용하여 자신이 원하는 형식(09일, 9일)과 순서를 지정하여 줄 수 있습니다
조합의 수가 많기에 가능한 조합의 경우는 아래 링크를 참고 부탁드립니다
활용
로그(타임 스탬프) 기록
private void LogEvent(string eventDescription) // 개발자가 의도하는 이벤트 메시지
{
DateTime currentTime = DateTime.Now; // 현재 시간 기록
string logMessage = $"{currentTime:yyyy-MM-dd HH:mm:ss} - {eventDescription}";
// 시간과 이벤트 메시지 형식 지정
// 원하는 방식으로 로그 파일에 저장
}
현재 날짜와 시간을 가져오는 방법을 활용하여, 게임 내에서 특정 이벤트가 발생한 시점을 기록하는 기능을 구현할 수 있습니다, 이를 통해 플레이어가 어떤 시간에 어떤 행동을 했는지를 추적하고, 게임 종료 시각을 세이브 파일에 기록하여 보여줄 수 있습니다
또 플레이어의 행동이나 이벤트가 발생할 때마다 해당 시점을 기록하면, 추후 문제 해결이나 플레이어 경험 분석에 사용할 수 있습니다
자동 저장
기본적으로 플레이어가 게임을 직접 저장하거나 게임 시스템에 따라서 자동 저장하지만, 현실의 시간을 이용하여 자동 저장하는 방법도 있습니다
using System;
using UnityEngine;
public class Test : MonoBehaviour
{
private DateTime nextSaveTime;
private void Start()
{
nextSaveTime = DateTime.Now.AddMinutes(10);
}
private void Update()
{
if (DateTime.Now >= nextSaveTime)
{
AutoSave();
nextSaveTime = DateTime.Now.AddMinutes(10); // 다시 10분 후로 자동 저장 시간 설정
}
}
private void AutoSave()
{
// 실제 저장 관련 로직
}
}
그외
위의 기능 외에서 AddDays, AddHours, AddMinutes등 시간을 더하거나 빼고
Subtract, TimeSpan을 이용하여 시간차이를 계산하고, Compare, Equals를 이용하여 시간을 비교할 수도있습니다
마치며
지금까지 C#의 DateTime 클래스를 활용하여 시간 관련 기능을 구현하는 방법에 대해 알아보았습니다, 자동 저장 기능을 비롯하여 게임의 사용자 경험을 향상시킬수 있는 방법 또한 알아봤습니다
하지만 System의 DateTime은 시스템의 '로컬 시간'을 가져오기에 시스템 시간이 변경되면 이 값도 변경됩니다, 멀티플레이 게임의 경우 서버의 시간을 가져오거나, 추가적인 동기화 작업이 필요할 것입니다
이상입니다