如何在Unity3D中制作实时计数器

时间:2018-11-24 10:09:37

标签: unity3d counter live

我最近开始使用Unity3D并进行了一些设置。
我现在唯一的问题是如何获得现场柜台?
因此,当我的角色被某物击中时,我的角色就​​会死亡。
我希望角色最多获得3条生命,而当他击中该物体时获得-1条生命。
而且它可以在他死后保留数据,因此,如果重新启动该应用程序,您将无法获得生命。 几分钟后,他获得+1直播。

谢谢:)

3 个答案:

答案 0 :(得分:1)

运行游戏时。只需创建一个变量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;

答案 1 :(得分:0)

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

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

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

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)之前的版本中存在一些bug(特别是在android平台中)请确保您记录值并检查函数是否正常运行。 https://forum.unity.com/threads/android-datetime-now-is-wrong.488380/

答案 2 :(得分:0)

查看以下链接以了解如何统一创建生命计数器 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);
     }
 }
}