Товарищи прошу помощи в реализации механики.
Дано:
1) Несколько полей-слоев находящихся друг под другом состоящих из одинаковых гексагонов, где у каждого гексагона свой коллайдер.
2) Персонаж с висящем на нем Capsule collider'ом, который ходит по гексагонам
3) Анимация исчезновения гексагона
4) Animation event в конце анимации который делает SetActive(false)
Суть вопроса:
Для входа и выхода из гексагонов я использую OnCollisionEnter и OnCollisionExit. Так же есть поле bool IsGrounded для того чтобы знать, что персонаж не в воздухе, которая true при Enter и false при Exit.
Далее чтобы анимация ходьбы сразу не переключалась на анимацию прыжка(полета) - на выходе я запускаю корутину, которая длится 0.3f и если в течении этого времени мы наступаем на другой гекс - выполняю StopCourutine().
Так вот вопрос в том, что периодически при входе на гекс корутина не останавливается и состояние анимации переключается на прыжок а затем сразу обратно на ходьбу, так же как и bool равен false .
Перепробовал много разных приемов и посмотрел видео, но не смог докопаться до сути вопроса, поэтому прошу помощи у вас, господа.
private void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Ground")
{
if (currentCoroutine != null)
{
StopCoroutine(currentCoroutine);
}
isGrounded = true;
anim.SetBool("IsGrounded", true);
}
}
public void OnCollisionExit(Collision col)
{
if (currentCoroutine != null)
{
StopCoroutine(currentCoroutine);
}
isGrounded = false;
currentCoroutine = StartCoroutine(Waiter());
}
IEnumerator Waiter()
{
yield return new WaitForSeconds(0.3f);
anim.SetBool("IsGrounded", false);
}