Unityでソーシャルゲームによくある体力回復機能の処理を実装してみます
■完成イメージ
■機能要件
・時間で体力を回復する
・体力を回復できる
・体力を使用することができる
■管理方法
・最後に体力を回復した時間を保持し、その時間との差分から次に回復する時間を算出する
・最後に体力を回復した時間と現在時刻の差分が1体力回復時間より大きければ体力を回復し、最後に体力を回復した時間を更新する
■管理用クラス全文
ソシャゲによくある体力管理機能のサンプル
■UI反映サンプル
using UnityEngine; using UnityEngine.UI; using System.Collections; public class ActionPointUIController : MonoBehaviour { [SerializeField] ActionPointManager apManager; [SerializeField] Text recoveryTimeLabel; [SerializeField] Text apStatusLabel; [SerializeField] Transform hpBar; void Start(){ apManager.Init (20, 20, System.DateTime.Now); apManager.UseActionPoint (10); } void Update(){ recoveryTimeLabel.text = apManager.GetRestRecoveryTimeLabel (); apStatusLabel.text = string.Format ("{0:00}/{1:00}", apManager.point, apManager.maxPoint); hpBar.localScale = new Vector3 (apManager.ActionPointRatio(), 1, 1); } }
■この実装の注意点
現在時刻の取得をSystem.DateTime.Nowで行なっているため、端末の時間を操作することによって体力が回復してしまう。対処方法として体力データの管理、消費はサーバを介して行うようにし、この方法はあくまでUIの表示のみの用途で使用すること。もしくは、計算に使用する時刻の取得をサーバから行い、それを利用することが考えられる。