Вы можете использовать Invoke
для вызова функции через x секунд. Я изменил ваш код ниже, чтобы очистить силовое поле через 5 секунд после его активации. Флаг forceFieldActive
не позволит снова активировать его, пока он уже активен.
int forceFieldDuration = 5; //5 second duration
bool forceFieldActive = false;
void Update()
{
if (Input.GetKey(KeyCode.Space) && forceFieldActive == false)
{
forceFieldActive = true;
GetComponent<CircleCollider2D>().radius = 25.0f;
Invoke("DisableForceField", 5);
}
}
void DisableForceField()
{
GetComponent<CircleCollider2D>().radius = 2.1f;
forceFieldActive = false;
}
Примечание : Вы также можете использовать сопрограмму, которая более эффективна, чем Draco18, упомянутые в комментариях. Это будет выглядеть так:
int forceFieldDuration = 5; //5 second duration
bool forceFieldActive = false;
void Update()
{
if (Input.GetKey(KeyCode.Space) && forceFieldActive == false)
{
forceFieldActive = true;
GetComponent<CircleCollider2D>().radius = 25.0f;
StartCoroutine(DisableForceField());
}
}
IEnumerator DisableForceField()
{
yield return new WaitForSeconds(forceFieldDuration);
GetComponent<CircleCollider2D>().radius = 2.1f;
forceFieldActive = false;
}