如何创建此动画过渡?

时间:2019-10-13 16:40:51

标签: c# unity3d animation animator

我正在使用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

2 个答案:

答案 0 :(得分:0)

我相信您正在寻找的是触发而不是布尔。

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

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

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

我认为您的代码无法正常运行的原因是因为您在同一帧中将其重新设置为false,所以我认为动画系统将在最后查看值可以这么说。

答案 1 :(得分:0)

这可能是因为:

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”

希望有帮助