【问题标题】:How do I create this animation transition?如何创建此动画过渡?
【发布时间】:2019-10-13 16:40:51
【问题描述】:

我正在使用 3D 头像,这是我第一次使用动画。我已经完成了一个从空闲动画到另一个动画的动画。它在滑动条的值低于 40 时进行转换,代码如下:

public Slider barraAlimento;
void Start()
{
    anim = GetComponent<Animator>();
}
void Update()
{
    if (barraAlimento.value <= 40)
    {
        anim.SetBool("IrHambriento", true);
    }
    else
    {
        anim.SetBool("IrHambriento", false);
    }
}

这可以正常工作,但我的问题是现在我想做另一个转换。当我单击一个按钮时,滑动条的值会增加(这就是触发上一个动画的方式),所以我想要在按下按钮时在上一个动画和新动画之间进行过渡。这个我试过了,还是不行:

 public Button botonManzana;
 void Start()
 {
     anim = GetComponent<Animator>();
     botonManzana.onClick.AddListener(ButtonManzanaClicked);
 }
 void ButtonManzanaClicked()
 {
     anim.SetBool("IrComiendo", true);
     anim.SetBool("IrComiendo", false);
 }

如果有用的话,方框和箭头就是这样的。

Animation transition

【问题讨论】:

    标签: c# unity3d animation animator


    【解决方案1】:

    我相信您正在寻找一个触发器而不是一个布尔值。

    将动画器中的 bool 值从 Boolean 更改为 Trigger 并将代码更改为...

    void ButtonManzanaClicked() 
    {
        anim.SetTrigger("IrComiendo");
    }
    

    这将在您每次“触发”触发器时发生转换,就像一次性的事情一样,不需要任何布尔值 true -> false 即可重置,就像您在此代码中尝试的那样。

    我相信您的代码不起作用的原因是因为您在同一帧中将其重新设置回false,并且我认为动画系统会查看每个末尾的值代码框架,可以这么说。

    【讨论】:

    • 我试过了,但是当它必须做第一个动画 (Hambriento) 时,它只做这个新的 (Comiendo),它不会返回到之前的动画。
    【解决方案2】:

    这可能是因为:

    void ButtonManzanaClicked()
    {
        anim.SetBool("IrComiendo", true);
        anim.SetBool("IrComiendo", false);
    }
    

    您在将其设置为 true 后立即将其设置为 false。

    尝试仅在按钮单击事件中放置anim.SetBool("IrComiendo", true);,并且仅在您希望它返回“Hambriento”动画时才使用anim.SetBool("IrComiendo", false);

    编辑:
    尝试这样做:

    将“IrComiendo”更改为触发(只是不需要将其值更改为false)
    OBS:使用anim.SetTrigger("IrComiendo");调用它

    如图所示设置连接:

    * 如果点击按钮后滑块的值不可能仍然小于40,则不需要连接

    ** 如果你想让它去 Comiendo,即使它不是 hambriento,也可以放置这个连接

    OBS:在按钮方法中,您只需更改滑块的值并调用“IrComiendo”

    希望对你有帮助

    【讨论】:

    • 我不知道为什么它不起作用。我试图只放 anim.SetBool("IrComiendo", true);在按钮单击事件中检查该部分是否有效,但是当我单击按钮时它不会执行动画。相反,第一次在空闲动画和“Hambriento”动画之间有一个过渡,但它没有转到“Comiendo”动画。第二次,它从空闲动画转到“Comiendo”动画并停在那里,不返回任何动画。
    • 第一次单击按钮时,IrComiendo 的值是否为真?从 Hambriento 到 Comiendo 的过渡条件是否设置为 IrComiendo = true?
    • 是的,在条件中设置为true。我试图在 Start() 方法的开头写anim.SetBool("IrComiendo", false);,现在它第一次而不是第二次进入 Comiendo 动画(不按下按钮)。
    • 所以您希望它在您第一次单击按钮时转到 Hambriento,而在您第二次单击按钮时转到 Comiendo,对吗?如果是这样,在按钮方法中,您可以使用 anim.GetBool("IrHambriento") 获取“IrHambriento”的状态并执行 anim.SetBool("IrComiendo", true);如果是真的。
    • 不,抱歉,不是这样。每次滑块的值(随时间减小)
    猜你喜欢
    • 2017-05-03
    • 2019-11-20
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2019-06-07
    相关资源
    最近更新 更多