Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по задержке юнити

Николай Минаев Профи (826), на голосовании 4 месяца назад
хочу сделать задержку после использования предмета например я использовал предмет он добавил мне 15 очков, а после 15 секунд я не могу его использовать
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Для создания задержки после использования предмета в Unity, вы можете использовать корутины (coroutines). Вот пример кода, который показывает, как можно это реализовать:

Создайте скрипт, например, ItemUsageDelay.cs, и добавьте его к вашему объекту:
 using UnityEngine; 
using System.Collections;

public class ItemUsageDelay : MonoBehaviour
{
public float delayTime = 15f; // Время задержки в секундах
private bool canUseItem = true;

// Метод для использования предмета
public void UseItem()
{
if (canUseItem)
{
// Ваш код для использования предмета
AddPoints(15);

// Начинаем корутину для задержки
StartCoroutine(ItemUseCooldown());
}
else
{
Debug.Log("Предмет не может быть использован в течение задержки.");
}
}

// Метод добавления очков
private void AddPoints(int points)
{
// Ваш код для добавления очков
Debug.Log("Добавлено " + points + " очков.");
}

// Корутина для задержки использования предмета
private IEnumerator ItemUseCooldown()
{
canUseItem = false; // Запрещаем использовать предмет
yield return new WaitForSeconds(delayTime); // Ждем заданное время
canUseItem = true; // Разрешаем использовать предмет снова
}
}
Добавьте скрипт на объект, с которым игрок будет взаимодействовать, и настройте параметры в инспекторе (например, время задержки).
Теперь, когда игрок попытается использовать предмет, будет проверяться, можно ли его использовать в данный момент. Если предмет можно использовать, будет добавляться 15 очков и запускаться корутина, которая блокирует использование предмета на 15 секунд. После окончания времени задержки предмет снова можно будет использовать.

Этот подход можно адаптировать под любые требования, изменяя логику внутри метода UseItem и другие параметры.




Использовать FixedUpdate для управления использованием предмета не рекомендуется, так как FixedUpdate вызывается с фиксированной частотой и обычно используется для физики. Однако, вы можете использовать Update или FixedUpdate для проверки условий, но логика самого использования предмета и управления задержкой должна оставаться в отдельном методе.
 using UnityEngine; 
using System.Collections;

public class ItemUsageDelay : MonoBehaviour
{
public float delayTime = 15f; // Время задержки в секундах
private bool canUseItem = true;

void FixedUpdate()
{
// Проверка условия для использования предмета
if (Input.GetKeyDown(KeyCode.E)) // например, при нажатии кнопки "E"
{
UseItem();
}
}

// Метод для использования предмета
private void UseItem()
{
if (canUseItem)
{
// Ваш код для использования предмета
AddPoints(15);

// Начинаем корутину для задержки
StartCoroutine(ItemUseCooldown());
}
else
{
Debug.Log("Предмет не может быть использован в течение задержки.");
}
}

// Метод добавления очков
private void AddPoints(int points)
{
// Ваш код для добавления очков
Debug.Log("Добавлено " + points + " очков.");
}

// Корутина для задержки использования предмета
private IEnumerator ItemUseCooldown()
{
canUseItem = false; // Запрещаем использовать предмет
yield return new WaitForSeconds(delayTime); // Ждем заданное время
canUseItem = true; // Разрешаем использовать предмет снова
}
}
Николай МинаевПрофи (826) 5 месяцев назад
а можно использовать вместо public void UseItem() void FixedUpdate()?
Татьяна Просветленный (36374) Николай Минаев, добавила к ответу то что еще просишь
Похожие вопросы