@MakIvan

Что лучше использовать — OnCollisionStay или OnCo0llisionEnter?

Товарищи прошу помощи в реализации механики.
Дано:
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);
    }
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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