Unity:实现手游中的根据时间获得体力

60 篇文章 2 订阅
6 篇文章 0 订阅

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里的变量实现体力随时间增加的功能

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值