我从球到地面的光线投射在每次触地时都会调用三次。
我只需要一次和推翻动画。电话是这样的:
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()
.