物品掉落到地面时,统一射线广播命中三声

时间:2019-04-26 11:08:26

标签: unity3d raycasting game-development

我从球到地面的射线投射每次触地都会发出3次呼叫。

我只需要一次动画。 呼叫是这样的:

  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 :(得分:0)

这可以解决您的问题。

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

答案 1 :(得分:0)

对象在

之内

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()