Выполнение условия через секунду в юнити
Всем привет! как сделать такую логику: если объект стоит на месте, то что - то происходит. у меня есть карта(это карточная игра) и если эта карта стоит1 секунду и не двигается, то создается объект(череp Instantiate()). Заранее спасибо
Ответы (2 шт):
Автор решения: OwlCherubael
→ Ссылка
Для этого нужно использовать класс Time. Ниже приведен пример кода.
public float second;
public bool isImmovable = false;
private Vector3 objectPosition;
void Start()
{
objectPosition = transform.position;
oneSecond = 1;
}
void Update()
{
oneSecond -= Time.deltaTime;
if (oneSecond <= 0)
{
oneSecond = 1;
if (objectPosition == transform.position)
isImmovable = true;
else if (objectPosition != transform.position)
{
objectPosition = transform.position;
isImmovable = false;
}
}
}
Автор решения: Alemkhan Utepkaliev
→ Ссылка
Изучай корутины. Вот пример:
private bool _isCondition; // для условия
private IEnumerator _waitCoroutine; // хранение корутины, необходим для ссылки на запущенную корутину
private void Start()
{
_waitCoroutine = WaitForInstantiate(); // присваивание корутины
}
private void CheckCondition()
{
if (_isCondition) // если условие выполняется то запускаем корутину
{
StartCoroutine(_waitCoroutine);
}
else // если условие не выполнено, то останавливаем корутину если она запустилась
{
StopCoroutine(_waitCoroutine);
// StopAllCoroutines(); // Есть возможность остановить все корутины в данном скрипте
}
}
private IEnumerator WaitForInstantiate()
{
yield return new WaitForSeconds(1f); // Ожидание 1 сек.
Instantiate(new GameObject()); // Необходимое действие
}