環境
- OS:Windows 10 Pro
- Unity:6000.0.47f1
サーバー時間を利用したゲーム制作

ゲーム制作において、サーバー時間を使った仕様は様々な場面で活用されています。
- ログインボーナス
- 仮想通貨(スタミナ)の回復
- 放置系の報酬の算出
デバイス時間を取得する場合は、「DateTime.Now」で取得可能です。しかし、これをゲーム内で利用すると簡単に不正できてしまうので、サーバー時間を利用することで防止することができます。
PlayFabを利用したサーバー時間の取得方法

この記事では、Unity+PlayFabでサーバー時間を取得する方法を紹介します。また、PlayFabについては以下の記事で詳しく解説しています。
PlayFabを利用することで、とても簡単にサーバー時間を取得することができます。ログイン処理後に「PlayFabClientAPI.GetTime」を呼び出し、「result.Time」で結果を取得できます。
/// <summary>
/// サーバー時間の取得
/// </summary>
public void GetTime() {
PlayFabClientAPI.GetTime(new GetTimeRequest(),
result =>
{
Debug.Log("サーバー時間の取得に成功しました");
Debug.Log(result.Time);
}, error =>
{
Debug.Log(error.GenerateErrorReport());
});
}
時間がズレる
ログを見ると、日付は合っていますが時間が「2時20分」となっており、9時間ズレています。

これはサーバー時間が「協定世界時(UTC)」というもので管理されているためです。
DateTime構造体
取得した「result.Time」に9時間を足すことで正確な時間を取得することができますが、ここでは「DateTime構造体」について少し解説します。
様々な機能を持っていますが、今やりたいことは「時間足す」なので、「Add〇〇」という機能を使います。これらはゲーム制作において使い勝手のいい機能なので、覚えておくと効率良く制作を進めることができます。
namespace System {
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, ISerializable {
public static readonly DateTime MaxValue;
public static readonly DateTime MinValue;
public static readonly DateTime UnixEpoch;
~省略~
public DateTime Add(TimeSpan value);
public DateTime AddDays(double value);
public DateTime AddHours(double value);
public DateTime AddMilliseconds(double value);
public DateTime AddMinutes(double value);
public DateTime AddMonths(int months);
public DateTime AddSeconds(double value);
public DateTime AddTicks(long value);
public DateTime AddYears(int value);
~省略~
}
}
ここでは、「AddHours」を使用します。9行目の「result.Time」を「result.Time.AddHours(9)」に書き換えてログで確認します。
/// <summary>
/// サーバー時間の取得
/// </summary>
public void GetTime() {
PlayFabClientAPI.GetTime(new GetTimeRequest(),
result =>
{
Debug.Log("サーバー時間の取得に成功しました");
Debug.Log(result.Time.AddHours(9));
}, error =>
{
Debug.Log(error.GenerateErrorReport());
});
}
正確な時間を取得することに成功しました!

まとめ
PlayFabを利用してサーバーから現在時刻を取得する手順は以下の通り。
- 「PlayFabClientAPI.GetTime」を呼び出す
- 取得した「result.Time」に「.AddHours(9)」を追記して日本時間に合わせる
これを活用して新しいゲーム制作に取り組みましょう!
ゲ制最高!
コメント