如何在玩家碰撞地面时停止触发动画?

时间:2017-10-11 04:04:51

标签: c# unity3d

我是一个新的团结用户,我正在尝试制作一个小型的平板电脑。 我可以控制我的球员,但我的跳跃有点问题。

我是用动画师的触发器制作的,但它确实有效,但我想在玩家触地时停止动画。

最好的方法是保持最后一次跳跃的帧准备,直到玩家触地,然后停止。

我在gameObjet上有一个collider2D,他使用此代码附加到玩家:

  void Start()
{
    Audio = GetComponent<AudioSource>();
    Anim = transform.parent.GetComponent<Animator>();
}

void OnTriggerEnter2D (Collider2D col)
{
    if (col.gameObject.tag == "Sol" || col.gameObject.tag == "Plateforme")
    {
        Anim.SetTrigger("stopJump");
        transform.parent.GetComponent<playerController>().isGrounded = true;
        Audio.pitch = 0.7f;
        Audio.volume = 0.7f;
        Audio.PlayOneShot(soundGround);
    }
}

我的动画师在'jump''idle'和run之间有'stopJump'转换。这是正确的做法吗? see my animator here

动画Jump不想在结束帧之前停止。如果我禁用'有退出时间',跳跃停止太早...... 触发器'stopJump'没有优先级......

谢谢!

1 个答案:

答案 0 :(得分:1)

在动画师的状态机中,

只需添加一个空闲状态和一个触发器,它将从JUMP状态转移到该IDLE(当玩家站在地上并且什么也不做时将循环)状态,然后从OnTriggerEnter2D你可以使用Animator .setTrigger(&#34; triggerName&#34;)将状态转移到空闲状态。

因为在我们的项目中玩家应该在很多条件下变得空闲,所以我们只是通过触发backIdel将AnyStat转移到空闲状态这里是示例:

enter image description here