GameManager代码:(C#单例,不需要加载到场景)
public class GameManager
{
//单例
private static GameManager main;
public static GameManager Main
{
get
{
if (main == null)
{
main = new GameManager();
}
return main;
}
}
private int main_vitality = -1;
/// <summary>
/// 玩家拥有的体力数量
/// </summary>
public int mainVitality
{
get
{
if (main_vitality == -1)
{
main_vitality = PlayerPrefs.GetInt("mainVitality");
}
return main_vitality;
}
set
{
main_vitality = value;
PlayerPrefs.SetInt("mainVitality",main_vitality);
PlayerPrefs.Save();
}
}
/// <summary>
/// 体力的上限值是多少
/// </summary>
public int mainVitalityMax = 100;
/// <summary>
/// 多少秒恢复一个体力
/// </summary>
public int mainVitalityRestoreSecond = 180;
private string get_vitality_time = "";
/// <summary>
/// 上次获得体力的时间
/// </summary>
public string getVitalityTime
{
get
{
if (get_vitality_time == "")
{
get_vitality_time = PlayerPrefs.GetString("GetVitalityTime");
}
return get_vitality_time;
}
set
{
get_vitality_time = value;
PlayerPrefs.SetString("GetVitalityTime", get_vitality_time);
}
}
/// <summary>
/// 下一次恢复体力的时间
/// </summary>
public TimeSpan nextVitalityRestoreTime;
/// <summary>
/// 根据时间自然恢复体力
/// </summary>
/// <param name="number">恢复的体力量</param>
public void AddVitalityByTime(int number)
{
if (mainVitality + number > mainVitalityMax)
{
mainVitality = mainVitalityMax;
}
else
{
mainVitality += number;
}
}
}
然后是用来计算时间的类TimeManager,为Unity单例,需要挂载在空物体上并且设定为切换场景时不消失
using System;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
private TimeSpan timeSpan;
void Start()
{
if (PlayerPrefs.GetInt("FirstValueGet") == 0)
{
GameManager.Main.mainVitality = GameManager.Main.mainVitalityMax;
GameManager.Main.getVitalityTime = DateTime.Now.ToString("");
PlayerPrefs.SetInt("FirstValueGet",1);
PlayerPrefs.Save();
}
}
private void Update()
{
RestoreVitality();
}
/// <summary>
/// 获得体力的方法
/// </summary>
void RestoreVitality()
{
timeSpan = DateTime.Now - Convert.ToDateTime(GameManager.Main.getVitalityTime);
if (timeSpan.TotalSeconds > GameManager.Main.mainVitalityRestoreSecond)
{
GameManager.Main.AddVitalityByTime((int)timeSpan.TotalSeconds/GameManager.Main.mainVitalityRestoreSecond);
GameManager.Main.getVitalityTime = DateTime.Now.ToString("");
}
else
{
GameManager.Main.nextVitalityRestoreTime = timeSpan;
}
}
}
将这两个代码设定好就可以访问GameManager里的变量实现体力随时间增加的功能