当物品掉到地上时,Unity Raycast 命中了三次呼叫



我从球到地面的光线投射在每次触地时都会调用三次。

我只需要一次和推翻动画。电话是这样的:

  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");
            }
        }

这可能会解决您的问题。

        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");
        }
    }

一旦你的对象在

distanceground + 0.1f

然后

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

将每FixedUpdate()返回false并推迟到您的else块,因此问题不在于Raycast

问题很可能在于您正在检查GetCurrentAnimatorStateInfo(0) FixedUpdate() .在较低的帧速率下,FixedUpdate()可以为每个Update()调用几次,导致

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

以评估true因为视觉动画状态可能还没有时间更新。

我建议将其全部移至Update().

相关内容

  • 没有找到相关文章

最新更新