Заставить Int увеличивать каждую секунду на значение x - PullRequest
0 голосов
/ 06 октября 2019

Я делаю игру, похожую на Cookie Clicker стиля 2013 года. Я застрял с созданием сценария автоматической генерации с течением времени. Я хочу иметь возможность доступа к сценарию, который автоматически создает "Маффины".

Я пытался создать сценарий несколько раз, но не могу изменить счетчик сдобы.

    public bool MakingMuffins = false;
    public static int MuffinIncrease = 1;
    public int InternalIncrease;

    void Update () {
        InternalIncrease = MuffinIncrease;
        if (MakingMuffins == false)
        {
            MakingMuffins = true;
            StartCoroutine(MakeTheMuffin());
        }
    }

    IEnumerator MakeTheMuffin ()
    {
            GlobalMuffins.MuffinCount += InternalIncrease;
            yield return new WaitForSeconds(1);
            MakingMuffins = false;

    }
}

и мой другой основной файл для запуска метода.

public void StartAutoMuffin()
    {
        if (InternalPlayerMuffins >=bakerycost){
        playSound.Play();
        StartBakery.SetActive(true);
        InternalPlayerMuffins -= bakerycost;
        bakerycost *= 2;
        turnOffButton = true;
        themps += 1;
        thelevel += 1;
        }else{
            Debug.Log("Cant do anything");
        }
    }

StartBakery - это игровой объект, который должен начать автоматическое создание после нажатия кнопки. По умолчанию он неактивен.

Вот еще код из моего основного скрипта, чтобы помочь понять.

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

public class GlobalGameMechanics : MonoBehaviour
{
    public static bool turnOffButton = false;
    public AudioSource muffinSound;
    public AudioSource playSound;
    public static int GlobalPlayerDiamonds;
    public int InternalPlayerDiamonds = 1200;
    public GameObject PlayerDiamondDisplay;
    public GameObject TotalMPS;
    public GameObject Cost;
    public GameObject Level;
    public GameObject MPS;
    public GameObject FakeCost;
    public GameObject FakeLevel;
    public GameObject FakeMPS;
    public int InternalPlayerMuffins = 15;
    public int bakerycost = 25;
    public int thelevel = 0;
    public int themps = 0;
    public int currentMuffins;
    public GameObject ShopPanel;
    public GameObject fakeButton;
    public GameObject realButton;
    public GameObject StartBakery;


    void Start()
    {

    }

    void Update()
    {

       GlobalPlayerDiamonds = InternalPlayerDiamonds;
       PlayerDiamondDisplay.GetComponent<Text>().text = "" + InternalPlayerDiamonds;
       TotalMPS.GetComponent<Text>().text = "/Sec " + themps;

       GlobalMuffins.MuffinCount = InternalPlayerMuffins;
       Cost.GetComponent<Text>().text = "" + bakerycost;
       Level.GetComponent<Text>().text = "Level " + thelevel;
       MPS.GetComponent<Text>().text = "MPS " + themps;

       FakeCost.GetComponent<Text>().text = "" + bakerycost;
       FakeLevel.GetComponent<Text>().text = "Level " + thelevel;
       FakeMPS.GetComponent<Text>().text = "MPS " + themps;

        currentMuffins = InternalPlayerMuffins;
        if (currentMuffins >= bakerycost)
        {
            fakeButton.SetActive(false);
            realButton.SetActive(true);
        }
        if (turnOffButton == true)
        {
            realButton.SetActive(false);
            fakeButton.SetActive(true);
            turnOffButton = false;
        }

     }

До сих пор я создал 1 кнопку, которую я хочу увеличить «InternalPlayerMuffins»По 1 каждую секунду. И тогда я хочу, чтобы Кнопка 2 увеличивалась на +5 / сек. У меня просто проблемы, и я застрял на несколько дней.

Я не могу увеличить кексы на своих: /

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Вы близки, кажется, что вы забыли бесконечно зацикливать свой сопрограмму так:

IEnumerator MakeTheMuffin() {
    while (true) {
        GlobalMuffins.MuffinCount += InternalIncrease;
        yield return new WaitForSeconds(1);
        MakingMuffins = false;
    }
}

Хотя я могу ошибаться, так как не уверен, что GlobalMuffins.MuffinCount является целым числомкоторый вы хотите увеличивать каждую секунду.

Но, как правило, идея та же, вы хотите, чтобы сопрограмма, целевой интервал, целевое целое число и значение, на которое вы хотите увеличить, примерно так:

public class YourMuffinMaker : MonoBehaviour {
    public float intervals;

    public int increment;

    private int muffinCount;

    void Start() {
        muffinCount = 0;
        StartCoroutine(CreateMuffinEveryIntervals());
    }

    private IEnumerator CreateMuffinEveryIntervals() {
        while (true) {
            muffinCount += increment;
            yield return new WaitForSeconds(intervals);
        }
    }
}

Этот опубликованный ответ также является альтернативой сопрограмме.

0 голосов
/ 06 октября 2019

я могу использовать InvokerRepeating , который вызывает метод каждый раз, когда вам нужно, например

void Start()
{
    InvokeRepeating("CreateNewMuffin", 0f, 1f);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...