возрождение единства после задержки

Я пытаюсь воссоздать объект через «x» время, однако, когда я использую yield и startcourutine, это вызывает много ошибок и ошибок в моем коде. и вместо того, чтобы уничтожить, я хочу скрыть объект и снова включить его, когда я возрождаю его после задержки. как это возможно, если у меня есть массивы?


person David    schedule 04.07.2016    source источник


Ответы (1)


Для прямого возрождения на той же позиции вы можете сделать это:

public class CrateCrash : MonoBehaviour
{
    ...

    public void InitRespawn(GameObject toRespawn)
    {
        StartCoroutine(RespawnObject(toRespawn, 5.0f));
    }

    private IEnumerator RespawnObject(GameObject toRespawn, float delay)
    {
        yield return new WaitForSeconds(delay);
        toRespawn.SetActive(true);
    }
}

Другой класс:

using UnityEngine;
using System.Collections;


public class Crate : MonoBehaviour
{   
    CrateCrash manager;    

    public void OnMouseDown()
    { 
        manager.InitRespawn(gameObject);

        gameObject.SetActive(true);

    }

    public void SetManagerReference(CrateCrash managerRef)
    {
        manager = managerRef;
    }    
}
person Gunnar B.    schedule 04.07.2016
comment
Эй, Гуннар! Спасибо, ваш следующий код делает то, что я хочу, однако он просто отключает объект и снова включает его. Я хочу назначить для него новую доступную позицию, которая у меня есть, и новый тип - person David; 04.07.2016
comment
@Alex Итак, назначьте свою новую позицию и введите сопрограмму RespawnObject(). - person Iggy; 04.07.2016
comment
Нет, вы можете вызвать их из сопрограммы (вместо SetActive) и передать в качестве параметра игровой объект. Затем вместо использования Instantiate вы вызываете там SetActive (и устанавливаете позицию, не имеет значения, делаете ли вы это до или после SetActive). - person Gunnar B.; 04.07.2016
comment
@iggy Как я получаю ошибки. это работает, но вовремя моя свободная позиция становится 0, и после этого она не работает - person David; 04.07.2016