playORM может сделать это для вас, используя S-SQL (масштабируемый SQL), который просто добавляет разделение, так что вы можете делать объединения внутри разделов.
Для того, что говорит доктор: «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
}
}