Хит Юнит Рэйкаст вызывает три раза, когда предмет падает на землю - PullRequest
0 голосов
/ 26 апреля 2019

Мой радиопередача с шара на землю вызывает три раза при каждом прикосновении к земле.

Мне нужна только одна анимация времени и всплывающего окна. вызов это:

  private void FixedUpdate()
    {
        if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f))
        {
            Debug.Log("intheair");

        }
        else {
            dropped = true;
            Debug.Log("dropped");
            if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))
            {
                GetComponent<Animator>().SetTrigger("topup");
                Debug.Log("trigged");
            }
        }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Как только ваш объект окажется в пределах

distanceground + 0.1f

Затем

if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f))

Вернет false каждый FixedUpdate() и отложитна ваш else блок, поэтому проблема не в Raycast.

Проблема , скорее всего , заключается в том, что вы проверяете GetCurrentAnimatorStateInfo(0) в FixedUpdate().При более низких частотах кадров FixedUpdate() может вызываться несколько раз для каждого Update(), в результате чего

if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))

оценивает true, поскольку состояние визуальной анимации, возможно, не успелопока что обновлю.

Я бы порекомендовал перенести все это в Update().

0 голосов
/ 26 апреля 2019

Это может решить вашу проблему.

        if (!Physics.Raycast(transform.position, -Vector3.up, distanceground + 0.1f) && !dropped)
    {
        Debug.Log("intheair");

    }
    else {
        dropped = true;
        Debug.Log("dropped");
        if (dropped && !GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("topup"))
        {
            GetComponent<Animator>().SetTrigger("topup");
            Debug.Log("trigged");
        }
    }
...