Unity 3d делает oop со временем с помощью поплавков - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь сделать игру, в которой вы можете получать деньги каждые 5 секунд. Я пытался вызывать сопрограммы, повторяя и находясь в сопрограмме, чтобы я мог добавить значение в число с плавающей точкой, а затем через 5 секунд снова добавить значение к нему, но это не работает, просто добавлю значение в число без задержки, помогите.

Один пример, который не работал:

        StartCoroutine(Job(2.0f));


void salary()
    {
        money += 10;
    }
    private IEnumerator Job(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);

        //After waitTime, you can use InvokeRepeating() for infinite loop infinite loop or you use a while(true) loop here
        InvokeRepeating("salary", 0.0f, 2.0f);
    }

Другой пример:

 StartCoroutine(Job(2));


    private IEnumerator Job(float waitTime)
{
    while (true)
    {
            money += 10;
        yield return new WaitForSeconds(waitTime);

    }

И другой пример:

        StartCoroutine(Job());


IEnumerator Job()
    {
        while (true)
        {
            yield return new WaitForSeconds(1);
            money += 10;

        }
    }

1 Ответ

0 голосов
/ 13 января 2020

Трудно точно сказать, что делает ваш код с тремя предоставленными фрагментами, но то, что вы говорите, вы пытаетесь выполнить sh, возможно:

Я пытаюсь сделать игру, в которой вы можно получать деньги каждые 5 секунд.

Сопрограммы предоставляют вам механизмы для выполнения sh этого.

Вот пример того, как вы можете достичь "в то время как l oop "решение для этого:

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

public class MakeMoneyEveryFive : MonoBehaviour
{
    public float Money = 0;
    public float PayRate = 5;
    public bool IsWorking = true;

    private float timeBeforePay = 3;
    private float timeBetweenPay = 5;

    private void Start()
    {
        // You have to start your coroutine somewhere
        StartCoroutine(MakeMoney(timeBeforePay, timeBetweenPay));
    }

    public IEnumerator MakeMoney(float initialDelay, float delay)
    {
        // this wait statement can be helpful for fine tuning when your loop starts
        yield return new WaitForSeconds(initialDelay);

        // a variable as the loop condition allows you to exit when you want
        while (IsWorking)
        {
            // it's important Money is scoped to the class
            Money += PayRate;
            // delay inside loop runs every time, spacing out the additions to Money
            yield return new WaitForSeconds(delay);
        }
        // if you escape the loop (IsWorking == false) the coroutine will exit
        // you will need to start another if you want it to start again.
    }
}

...