Есть ли в C# функция для уменьшения значения типа int или double? - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь сделать сценарий для здоровья игроков, выносливости, голода и жажды. Я пытаюсь уменьшить чувство голода и жажды с течением времени на 0,1 в течение 3 минут, но я не знаю, есть ли какая-то функция для этого (я также сделал выносливость в качестве int, потому что я хочу сохранить ее) , Я новичок в программировании, так что это может звучать как глупый вопрос. Вот код, с которым я работаю.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player_Stats : MonoBehaviour {

    public double Health;
    public double Thirst;
    public double Hunger;
    public int Stamina;

    // Use this for initialization
    void Start () {
        Health = 100;
        Thirst = 100;
        Hunger = 100;
        Stamina = 100;
    }

    // Update is called once per frame
    void Update () {

    }
}

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Прежде всего, вам нужно следить за временем.

double time;

void Update () {
    ...
    time += Time.deltaTime;
    ...
}

Затем вам нужно проверить, прошло ли время

double targetTime;
void Update () {
    ...
    if ( time >= targetTime ) {
        time -= targetTime;
        hunger -= some number
        thirst -= some number
    }
    ...
}
0 голосов
/ 30 апреля 2020

Лучшим способом было бы использовать coroutine, например,

IEnumerator DecreaseStats(){
    float startTime = time.now;
    while(time.now - startTime < 3*60){ // less than 3 mins has passed

        hunger -= 0.1f;
        thirst -= 0.1f;

        yeild return new WaitForSeconds(0.5f); // wait for 0.5 seconds (tweak this time)

    }
}

Затем вызывать эту функцию всякий раз, когда вы хотите, чтобы это уменьшение началось

StartCoroutine(DecreaseStats());

Это будет работать параллельно ваш метод обновления, и вы можете вызывать его где угодно в коде

0 голосов
/ 26 апреля 2020

Я понимаю, что вы хотите уменьшить голод и жажду на 0,1 каждые 3 минуты. Специфическая c функция, подобная этой в C#, не существует, насколько я знаю, но вы можете создать ее с помощью метода Sleep () , Вот код:

public static void Update (double health,double thirst,double hunger,int stamina)
    {
        while(true)
        {
            Thread.Sleep(3000);
            hunger = hunger - 0.1;
            thirst = thirst - 0.1;
            //Console.WriteLine("Hunger: "+hunger.ToString()+" Thirst: "+thirst.ToString());
        }

    }

Он ждет 3000 миллисекунд (если вы хотите 3 минуты, вы должны сделать это 3 * 60 * 1000 миллисекунд), а затем он уменьшает две переменные. Это просто базовый c пример, над которым вам нужно поработать, и я думаю, что вы должны запустить его как отдельный поток. Надеюсь, я вам помог и удачи в вашей игре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...