[Unity] 간단한 기간 한정 기능 작성 (DateTime 이용 메모)

2241 단어 datetimeUnity

클라이언트 전용 처리



TimeLimit.cs 컴포넌트 생성
public class TimeLimit : MonoBehaviour
{
    /// <summary>
    /// 限定日にち
    /// </summary>
    [SerializeField]
    private LimitedTime limitedtime;
    [SerializeField]
    private GameObject description;
    private void Start()
    {
        //起動時、期間内時チェック
        if (PlayerPrefs.GetString("HasExpired", "false") == "false")
        {
            //期間切れ処理
            if (HasExpired(limitedtime))
                PlayerPrefs.SetString("HasExpired", "true");
        }
        //期間切れ処理
        if (PlayerPrefs.GetString("HasExpired", "false") == "true")
            description.SetActive(true);
        //期間内処理
        else
            SceneManager.LoadScene("Main");
    }
    /// <summary>
    /// 期間切れかどうかを返す
    /// true:期間切れ、false:期間内
    /// </summary>
    private bool HasExpired(LimitedTime limit)
    {
        //現在の UTC 日時
        var now = DateTime.UtcNow;
        //限定日時取得
        var limitdate = GetDateTime(limit);
        //残り日時処理
        var remaining = limitdate - now;
        //残り日数チェック
        if (remaining.TotalDays < 0)
            return true;
        return false;
    }
    /// <summary>
    /// DateTimeを返す
    /// 日にち範囲外の処理をする。
    /// </summary>
    private DateTime GetDateTime(LimitedTime limit){
        //limit.year年範囲外処理
        var year = Mathf.Clamp(limit.year, 2018, 2028);
        //limit.month月範囲外処理
        var month = Mathf.Clamp(limit.month, 1, 12);
        //limit.month月の日数を取得
        var days = DateTime.DaysInMonth(year, month);
        //日範囲外処理
        var day = Mathf.Clamp(limit.day, 1, days);
        return new DateTime(year, month, day);
    }
}
[Serializable]
public class LimitedTime
{
    [Range(2019, 2028)]
    public int year;
    [Range(1, 12)]
    public int month;
    [Range(1, 31)]
    public int day;
}

장면에서 GameObject를 만들고 TimeLimit 컴포넌트를 추가하고 Year/Month/Day를 지정합니다.
Description에는 표시시킬 GameObject를 첨부

좋은 웹페이지 즐겨찾기