c # Как обнаружить уничтоженный клон - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать игру-симулятор кулинарии на Unity, где при нажатии на тарелку сырой пищи через x секунд она генерирует клон приготовленной еды на гриле.Если я не нажму (уничтожу) эту приготовленную пищу через x секунд, то эта приготовленная пища станет сожженной пищей.

void OnMouseDown()
{
    // food item 1
    if (gameObject.name == "blobraw1") {
        StartCoroutine(cookandburn("blobraw1"));
    }
    else if (gameObject.name.Contains("blobcooked1")) {
        if(corder.SearchandRemove(gameObject)) {
            Destroy(gameObject);
        };
    }
}

public IEnumerator cookandburn(string rawFoodName) {
    float x = Random.Range(MinX, MaxX);
    float y = Random.Range(MinY, MaxY);

    yield return new WaitForSeconds(cooktime);
    if (rawFoodName == "blobraw1")
    {
        // generate raw food
        Instantiate(cooked1, new Vector3(x, y, 10), Quaternion.identity);
        yield return new WaitForSeconds(burntime);
        // generate burned food if condition doesn't satisfy
        Instantiate(burned1, new Vector3(x, y, 10), Quaternion.identity);
    }

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

1 Ответ

0 голосов
/ 06 декабря 2018

Вам необходимо добавить isDestroyed = false флаг.После того, как еда уничтожена, сделайте это правдой.Проверьте состояние, прежде чем создавать сгоревшую пищу.Как только сопрограмма закончится, сделайте флаг ложным снова.Если вы хотите использовать в других скриптах, может быть полезно установить флаг PlayerPrefs.SetInt("isDestroyed", 0)

bool is Destroyed = false; //Define this on top of the script
public IEnumerator cookandburn(string rawFoodName) {
float x = Random.Range(MinX, MaxX);
float y = Random.Range(MinY, MaxY);

yield return new WaitForSeconds(cooktime);
if (rawFoodName == "blobraw1")
{
    // generate raw food
    Instantiate(cooked1, new Vector3(x, y, 10), Quaternion.identity);
    yield return new WaitForSeconds(burntime);
    // generate burned food if condition doesn't satisfy
    // Check that if the object was destroyed
    if(!isDestroyed){
        Instantiate(burned1, new Vector3(x, y, 10), Quaternion.identity);
    }
}
isDestroyed = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...