Search code examples
unity-game-enginecounterlive

How to make a live counter in unity3d


I recently started using Unity3D and made a few levels.
The only problem I have right now is how can I get a live counter?
So my character dies when he hits and certain object.
I want my character to get 3 lives maximum, and get -1 live when he hits that object.
And that it keeps the data when he dies so you wouldn't get lives back if you restart the app. And after a certain amount of minutes he gets +1 live.

Thank you :)


Solution

  • You can use PlayerPrefs.SetInt , PlayerPrefs.GetInt for storing and reading your player's hp in file storage. Read more about it here:

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

    As for Giving player +1 hp after a few minutes you can store DateTime.Now in a PlayerPrefs variable whenever you give your player some hp and use TimeSpan and TotalMinutesPassed:

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

    Should go sth like this i guess(didnt test this code just showing a general idea) :

    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());
        }
    }
    

    Note: DateTime , TimeSpan classes have some bugs (specially in android platform) in versions older than 2017.4 (LTS) Make sure you log values and check if functions are working properly. https://forum.unity.com/threads/android-datetime-now-is-wrong.488380/