https://qiita.com/NWaka_1415/items/1b0c7fd328ae8ca5ad7a
はじめまして,Nわかです。
初めての投稿でもあるので、軽く自己紹介。
現在起業した友人のもとでUnityエンジニアとして,大学に通いつつ働かせてもらっています。
現在1つのスマホ向けカジュアルゲーム制作を任されています。リモートでOKとのことで,ほぼ家や授業の合間などに作業させてもらっています。ホンマありがたいです。
その担当したゲームの機能の一つに**「オフライン報酬」**というものがあります。これはゲームをプレイしていなくても,ゲーム内コインがゲームをやっていなかった時間分貰えるもらえるというものです。
ソシャゲの時間経過で回復する体力(ゲームプレイ時に消費)などが近しい機能でしょう。
この機能を実装するにあたって,結構ググりましたが,直接的な記事は見当たりませんでした。
自分用の備忘録として,そして似たような機能を実装する方の助けに少しでもなれればと思います。
今回実装するにあたり,決められていた仕様をざっくりと。
本当にざっくりと、ですが。
それでは実際に実装していくわけですが,やることとして大まかに2つ項目があります。
サーバーとのやり取りをしないとのことなので,ローカルで時間を取得して前回の時間との差分を出して報酬を計算してあげる必要があります。
private void SetOfflineEarning()
{
double minutes = CalcSecond(DateTime.UtcNow, _endTime) / 60;
_endTime = DateTime.UtcNow;
_earnOffline = (int) minutes * _offlineEarning;
Save();
}
DateTime.UtcNow
で現在のUTC時刻を取得可能。Save();
では,今回の機能に関係あるものでは_endTime
のみ保存しています。また,記載していませんが,ゲーム開始時に_endTime
を読み込んでいます。
1分あたりの報酬なので,今回は60で割っています。