Я пытаюсь воссоздать объект через «x» время, однако, когда я использую yield и startcourutine, это вызывает много ошибок и ошибок в моем коде. и вместо того, чтобы уничтожить, я хочу скрыть объект и снова включить его, когда я возрождаю его после задержки. как это возможно, если у меня есть массивы?
возрождение единства после задержки
Ответы (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
Эй, Гуннар! Спасибо, ваш следующий код делает то, что я хочу, однако он просто отключает объект и снова включает его. Я хочу назначить для него новую доступную позицию, которая у меня есть, и новый тип
- person David; 04.07.2016
@Alex Итак, назначьте свою новую позицию и введите сопрограмму
RespawnObject()
.
- person Iggy; 04.07.2016
Нет, вы можете вызвать их из сопрограммы (вместо
SetActive
) и передать в качестве параметра игровой объект. Затем вместо использования Instantiate
вы вызываете там SetActive
(и устанавливаете позицию, не имеет значения, делаете ли вы это до или после SetActive
).
- person Gunnar B.; 04.07.2016
@iggy Как я получаю ошибки. это работает, но вовремя моя свободная позиция становится 0, и после этого она не работает
- person David; 04.07.2016