Как изменить размер circlecollider2d для X количество времени - PullRequest
0 голосов
/ 15 сентября 2018

Я бы хотел использовать мой circlecollider2d как своего рода силовое поле, чтобы отодвигать объекты назад на заданное время при нажатии кнопки.Вот код, который у меня есть, чтобы просто включить и выключить его снова.

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        GetComponent<CircleCollider2D>().radius = 25.0f;
    }
    else
    {
        GetComponent<CircleCollider2D>().radius = 2.1f;
    }
}

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете использовать 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...