Как сделать живой счетчик в unity3d - PullRequest
0 голосов
/ 24 ноября 2018

Я недавно начал использовать Unity3D и сделал несколько уровней.
Единственная проблема, с которой я сейчас сталкиваюсь, это как я могу получить живой счетчик?
Таким образом, мой персонаж умирает, когда он ударяет и определенный объект.
Я хочу, чтобы мой персонаж получал максимум 3 жизни и получал -1 вживую, когда он ударяет по этому объекту.
И что он сохраняет данные, когда он умирает, чтобы вы не вернули жизни, если перезапустите приложение.И через определенное количество минут он получает +1 живой.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Пока ваша игра запущена.просто создайте переменную 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;
0 голосов
/ 24 ноября 2018

Вы можете использовать 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 имеют некоторыеошибки (особенно в платформе Android) в версиях старше 2017.4 (LTS) Убедитесь, что вы записываете значения и проверяете, работают ли функции должным образом.https://forum.unity.com/threads/android-datetime-now-is-wrong.488380/

...