Unity Time Checker - PullRequest
       3

Unity Time Checker

0 голосов
/ 30 сентября 2018

Есть ли проверка времени, которая может быть реализована в единстве?Например, я хочу проверить текущую дату и время, могу ли я позвонить что-нибудь из Google или другого источника, чтобы проверить время, чтобы я не проверял время устройства пользователя, которое они могли бы изменить.Любые ссылки или информация будут полезны.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Это код, который я использовал.Он использует UnityWebRequest (требуется Unity 5.2.0 или выше) для https и https://nist.time.gov/actualtime.cgi для времени, использует сопрограмму для ожидания ответа

nist.time.gov / actualtime.cgi:

// time * 10 == ticks
<timestamp time="1538381371720144" delay="0"/>

код:

public DateTime LastSyncedLocalTime
{
    get;
    private set;
}

public DateTime LastSyncedServerTime
{
    get;
    private set;
}

public DateTime InterpolatedUtcNow
{
    get
    {
        return DateTime.UtcNow + (LastSyncedServerTime - LastSyncedLocalTime);
    }
}

public IEnumerator Sync()
{
    using (var www = UnityWebRequest.Get("https://nist.time.gov/actualtime.cgi"))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.LogError(www.error);
            yield break;
        }

        var timestamp = XElement.Parse(www.downloadHandler.text);
        var ticks = long.Parse(timestamp.Attribute(XName.Get("time")).Value) * 10;

        LastSyncedLocalTime = DateTime.UtcNow;
        LastSyncedServerTime = new DateTime(1970, 1, 1).AddTicks(ticks);
    }
}
0 голосов
/ 01 октября 2018

Насколько я знаю, Unity не поддерживает какой-либо способ получения времени, которое нельзя изменить на локальном устройстве.Я думаю, что лучшим решением для этого было бы запустить небольшой скрипт php, чтобы узнать время, используя формат date () .

<?php echo "Today is " . date("Y/m/d");>, который будет возвращать местное время

Затем вы можете получить эти данные, используя WWW класс

public static IEnumerator GetTimeStamp(string url, RequestCompletedCallback callback)
{
    UnityWebRequest www = UnityWebRequest.Get(url);//url would be where the php script is hosted
    www.SendWebRequest();

    while (!www.isDone)
    {
        if (www.isNetworkError || www.isHttpError)
        {
            throw new System.ArgumentException("Web request failed: ", www.error);
        }
        yield return null;
    }
    // Store results in a string
    if (callback != null)
    {
        string result = www.downloadHandler.text;
    }

    www.Dispose();
}

Другим решением будет использование API, который возвращает даты, такие как timezonedb или timeanddate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...