Сопрограммы и триггеры

playORM может сделать это для вас, используя S-SQL (масштабируемый SQL), который просто добавляет разделение, так что вы можете делать объединения внутри разделов.

0
задан Uwe Keim 17 March 2019 в 19:32
поделиться

1 ответ

Для того, что говорит доктор: «OnTriggerStay вызывается один раз за обновление физики для каждого другого Коллайдера, который касается триггера». Это означает, что ваш код:

if (otherCollider.tag == "Desk")
{ 
    collidingWithDesk = true;
    transform.Translate(0, 0, 0);
    anim.Play("enemyHit");
    StartCoroutine(enemyIsAttacking());
}

будет вызываться при каждом обновлении, а затем приостанавливаться на 5 секунд из-за yield return new WaitForSeconds(5f);. Вы должны использовать OnColliderEnter, иначе может быть лучше использовать OnTriggerEnter, потому что этот будет звонил один раз. Затем измените значение внутри вызова WaitForSeconds на 1, если вы хотите, чтобы это происходило один раз в секунду.

Также, как указано в Draco18s, ваша доходность ничего не ждет. Вы должны сделать что-то вроде этого:

IEnumerator enemyIsAttacking()
{
    var deskHealth = Desk.GetComponent<DeskHealth>();
    while(collidingWithDesk)
    {
        deskHealth.DealDamageToDesk(damageDealtToDesk);
        yield return new WaitForSeconds(1f);        
    }
}

void OnTriggerExit(Collider otherCollider)
{
    if (otherCollider.tag == "Desk")
    { 
        collidingWithDesk = false;
        // rest of your code
    }
}
0
ответ дан La pieuvre 17 March 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: