为什么我收到异常 'Space_Soldier_A_LOD1(Clone)' AnimationEvent 'FootStep' 没有接收器!你缺少一个组件吗?

Why i'm getting exception 'Space_Soldier_A_LOD1(Clone)' AnimationEvent 'FootStep' has no receiver! Are you missing a component?

我一个小时前没有这个异常。 我现在正在尝试的任何动画中都会得到它。

例如,在 HumanoidWalk 上,我没有遇到异常,但是这个作为包一部分的动画无缘无故地开始制作这个 exception/s 大概半小时前。

我为角色创建了一个新的动画控制器并创建了新的混合树,然后在混合树中尝试更改默认情况下的一些步行动画我使用了 HumanoidWalk 然后动画不是我自己的步行包和它工作正常。然后我在混合树中尝试了另一个动画,然后出现了这个异常。

我正在使用的附加到角色的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Soldier : MonoBehaviour
{
    private Animator anim;

    private void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        var inputVelx = Input.GetAxis("Horizontal");
        var inputVely = Input.GetAxis("Vertical");

        transform.Rotate(0, inputVelx, 0);

        anim.SetFloat("VelX", inputVelx);
        anim.SetFloat("VelY", inputVely);
        anim.SetBool("Aiming", false);

        if (Input.GetMouseButtonDown(1))
        {
            anim.SetBool("Aiming", !anim.GetBool("Aiming"));
        }
    }
}

如果您查看 Animator 的动画(Unity -> Window -> 动画),您可以在事件线内看到一个白色的小矩形。这个白色矩形代表一个动画事件,它在动画处于当前步骤时被触发。 有关动画事件的更多信息: https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html

此动画事件尝试调用游戏对象(在您的案例中为士兵)的方法(函数)"FootStep"。 您需要做的是删除此动画事件(白色矩形),或通过 FootStep 函数扩展您的士兵 class:

class Soldier : MonoBehaviour
{
   ... 

   public function FootStep() {
      // do something
   }

   ...
}

希望对您有所帮助。