Для создания задержки после использования предмета в 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; // Разрешаем использовать предмет снова
}
}