Unity动画事件 - 没有选择函数

4
我谷歌搜索并尝试了很多方法,但现在感到非常困惑,因为只是一个简单的问题却需要花费太多时间来解决。 网页中有两种类型的帖子:

  1. 控制台显示“未选择函数”错误,解决方案是某些人不小心添加了动画事件但没有设置它。<- 这不是我要找的
  2. 我向我的剪辑中添加了一个动画事件,但是在下拉菜单“函数”上单击时显示“未选择函数”,无法选择任何内容。 <- 这就是我要找的。 这种类型的帖子从未得到答案。

这是它的外观: enter image description here

层次结构:

对象1
  对象1.1 <- 具有启动动画的脚本
  对象1.2 <- 具有动画器。 旋转和缩放对象1.2

更多信息: 是的,我首先选择了我的Object 1.2,在Animation-Window中选择了正确的剪辑,并添加了一个动画事件。

1个回答

14

这种帖子从来没有得到答案。

请允许我对此表示怀疑。


只需确保您的设置满足以下条件:

AnimationEvent 需要:

  • 您要使用其方法的组件附加到与 Animator 组件相同的 GameObject
  • 您要调用的方法具有公共 void 访问性和返回类型
  • 您要调用的方法具有零个或最多一个参数
  • 支持参数类型为 intfloatstringUnityEngine.ObjectAnimationEvent

由于您的脚本位于另一个 GameObject 上,因此您可以将调用重定向,例如:

public Redirector : MonoBehaviour
{
    // Either drag in via Inspector
    [SerializeField] private ScriptOnOtherObject _scriptOnOtherObject;

    // or get at runtime if you are always sure about the hierachy
    private void Awake()
    {
        _scriptOnOtherObject = transform.parent.GetComponent<ScriptOnOtherObject>();
    }

    // and now call this from the AnimationEvent
    public void DoIt()
    {
        _scriptOnOtherObject.TheMethodToCall();
    }
}

1
它没有显示的唯一原因是因为该方法来自Object 1.1(在我的示例中),而动画器位于Object 1.2上。 - Perazim
不确定自发布以来是否有所改变,但根据https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html,不支持“bool”。 - Richard Muthwill
参数可以是 floatstringint 或者 object 引用,或者是一个 AnimationEvent 对象。 - Richard Muthwill
1
@RichardMuthwill 很好的观点..而且这个还没有改变 ;) - derHugo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接