티스토리 뷰

유니티

유니티 - DateTime 활용하여 재화 지급

쉬엄쉬엄하자 2020. 8. 10. 16:22
728x90

안녕하세요 이번에는 C#의 라이브러리 DateTIme클래스를 활용방법에 대해 알아보겠습니다.

 

모바일 게임을 개발할 때 흔히 시간에 따라 게임내의 재화를 지급하는 기능을 많이 씁니다.

예를 들면, 어느 특정 컨텐츠의 입장권이라던가 게임 플레이 자체의 입장권등을 일정시간마다 하나씩 지급하는 경우가 되겠습니다.

 

이 기능 구현을 위해 거쳐야할 순서로는

유저의 마지막 접속시간 가져오기 -> 현재시간 가져오기 -> 시간차이 계산 -> 시간차이를 지급시간으로 나누어 지급

 

첫번째로 유저의 마지막 접속시간을 가져와야합니다.

DB를 운영하신다면 유저테이블에 적당한 컬럼을, DB를 운영하지 않으신다면 앱 내부에 데이터를 추가하여 유저의 마지막 접속시간을 기록할 장소를 만듭니다.

 

그럼 접속시간을 기록하는 시기는 보통 접속을 종료할때, 재화를 지급하였을 때로 잡으시면 됩니다.

해당 시기에 현재시간을 구하여 기록합니다.

DateTime now;
now = DateTime.Now;

아주 간단한 코드로 현재 시간을 구할 수 있습니다.

 

그 다음 유저 마지막 접속시간과 현재시간의 차이를 구합니다.

TimeSpan timespan;
DateTime userIndate;
DateTime now;

now = DateTime.Now;
userIndate = Convert.ToDateTime(Userinfo.indate);
//가져온 유저의 문자열 접속시간을 DateTIme으로 변경합니다.

timespan = now - userIndate; //시간의 차이를 구합니다.

timespan에서 구한 시간을 초, 분 ,밀리초 등으로 원하는대로 가져와 쓸 수 있습니다.

여기서 유저정보의 indate값은 시간 형식을 준수한 문자열이어야합니다.

예를 들어 19900422 등의 년월일 날짜는 시간형식으로 인식되지 않습니다.

timespan.TotalSeconds//차이를 초로 나타냅니다.
timespan.TotalMinuites// 분으로 나타냅니다.
timespan.Miliseconds//밀리초로 나타냅니다.

이는 모두 더블형을 반환하기 때문에 사용의 편의를 위해서 int형으로 캐스팅한 후 사용하시면 좋습니다.

 

이제 시간의 차이를 활용하여 재화를 지급합니다.

 

UserInfo.tickets += (int)timespan.TotalSeconds / 600;

10을 기준으로 재화를 지급할경우 다음과 같이 계산하여 지급합니다.

여기서 만약 시간초가 648초여서 48초가 남기 때문에

유저의 접속시간을 10분만큼 당겨줘야 다음에 재화를 다시 지급할 때 정확한 양을 지급할 수 있습니다.

 

질문 있으시면 질문 남겨주시고 최대한 빠른 시일내에 답변드리겠습니다.

게시글과 다른 내용의 질문은 정확한 답변을 드리기 어려울 수 있습니다.

가장 빠른 시간내로 답변을 원하시면 오픈카톡방을 이용해주시길 바랍니다.

 

오픈카톡방 : 쉬엄쉬엄하자-티스토리

댓글