如何在unity3d中制作一个实时计数器

How to make a live counter in unity3d

我最近开始使用 Unity3D 并制作了一些关卡。
我现在唯一的问题是如何获得实时计数器?
所以我的角色在他击中某个物体时就死了。
我希望我的角色最多获得 3 条生命,并在他击中那个物体时获得 -1 条生命。
而且它会在他死后保留数据,因此如果您重新启动应用程序,您将无法恢复生命。 在一定时间后,他获得 +1 直播。

谢谢:)

您可以使用 PlayerPrefs.SetInt , PlayerPrefs.GetInt 在文件存储中存储和读取播放器的 hp。在这里阅读更多相关信息:

https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

至于几分钟后给玩家 +1 hp,只要您给玩家一些 hp 并使用 TimeSpan 和 TotalMinutesPassed,您就可以将 DateTime.Now 存储在 PlayerPrefs 变量中:

TimeSpan passedTime = DateTime.Now - lastStoredDateTime;
int totalMinutesPassed = passedTime.TotalMinutes;

我猜应该是这样的(没有测试这段代码只是展示了一个大概的想法):

void SetPlayerLives(int lives)
{
    playerLives = lives;
    PlayerPrefs.SetInt("player-lives",playerLives);
}
//TODO: also sth like => int GetPlayerLives() function
void CheckLiveRegen() //call this function whenever you want to check live regen:
{
    int LIVE_REGEN_MINUTES = 5; //regen 1 live every 5 minutes
    DateTime lastStoredDateTime = DateTime.Parse(PlayerPrefs.GetString("last-live-regen", DateTime.Now.ToString()));
    TimeSpan passedTime = DateTime.Now - lastStoredDateTime;
    double totalMinutesPassed = passedTime.TotalMinutes;
    if(totalMinutesPassed >= LIVE_REGEN_MINUTES) 
    {
        int val = (int) totalMinutesPassed / LIVE_REGEN_MINUTES;
        // Add val to your player lives! + store new lives value
        SetPlayerLives(playerLives+val);
        //update last-live-regen value:
        PlayerPrefs.SetString("last-live-regen", DateTime.Now.ToString());
    }
}

注意:DateTime、TimeSpan 类 在早于 2017.4 (LTS) 的版本中有一些错误(特别是在 android 平台中)确保记录值并检查函数是否正常工作。 https://forum.unity.com/threads/android-datetime-now-is-wrong.488380/

而你的游戏运行。只需创建一个变量 counterTime 来计算时间,每当 counterTime 通过一定的时间时,您希望将 counterTime 重置为 0 并增加您的生命。 当用户退出您的应用程序时,将最后一次保存到 PlayerPref,例如:

PlayerPref.SaveString("LastTime", DateTime.Now);

当用户返回游戏时,只需查看上次与现在之间的持续时间,即可计算出需要添加的总生命值。例如:

DateTime lastTime = DateTime.Parse(PlayerPref.GetString("LastTime"));
TimeSpan timeDif= DateTime.Now - lastTime;
int duration = timeDif.TotalSeconds;

查看以下内容link 了解如何在 unity 中创建生命计数器 http://codesaying.com/life-counter-in-unity/

为了计算自上次关闭游戏后经过的时间,您应该将最后一次玩家偏好保存在函数 OnApplicationPause 中,并在唤醒函数中计算经过的时间。

 void Awake () {

     if(!PlayerPrefs.HasKey("Lives")){
         PlayerPrefs.SetString("LifeUpdateTime", DateTime.Now.ToString());
     }
     lives = PlayerPrefs.GetInt("Lives", maxLives);
     //update life counter only if lives are less than maxLives
     if (lives < maxLives)
     {
         float timerToAdd = (float)(System.DateTime.Now - Convert.ToDateTime(PlayerPrefs.GetString("LifeUpdateTime"))).TotalSeconds;
         UpdateLives(timerToAdd);
     }

 }


 void UpdateLives(double timerToAdd ){
     if (lives < maxLives)
     {
         int livesToAdd = Mathf.FloorToInt((float)timerToAdd / lifeReplenishTime);
         timerForLife = (float)timerToAdd % lifeReplenishTime;
         lives += livesToAdd;
         if (lives > maxLives)
         {
             lives = maxLives;
             timerForLife = 0;
         }
         PlayerPrefs.SetString("LifeUpdateTime", DateTime.Now.AddSeconds(-timerForLife).ToString());
     }else{
         PlayerPrefs.SetString("LifeUpdateTime", DateTime.Now.ToString());
     }
 }
 void OnApplicationPause(bool isPause)
 {
     if (isPause)
     {
         timeOfPause = System.DateTime.Now;
     }
     else
     {
         if(timeOfPause == default(DateTime)){
             timeOfPause = System.DateTime.Now;
         }
         float timerToAdd = (float)(System.DateTime.Now - timeOfPause).TotalSeconds;
         timerForLife += timerToAdd;
         UpdateLives(timerForLife);
     }
 }
}