我从球到地面的射线投射每次触地都会发出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");
}
}
答案 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()
。