【问题标题】:How to stop trigger animation when player colliding the ground?玩家碰撞地面时如何停止触发动画?
【发布时间】:2017-10-11 15:35:03
【问题描述】:

我是Unity的新用户,我正在尝试制作一个小2D平板电脑。 我可以控制我的播放器,但我的跳跃有点问题。

我在动画师中使用触发器制作了它,它可以工作,但是我想在玩家接触地面时停止动画。

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

我有一个 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'没有优先级...

谢谢!

【问题讨论】:

标签: c# unity3d


【解决方案1】:

在动画师的状态机中,

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

在我们的项目中,玩家应该在很多情况下处于空闲状态,所以我们只是通过触发backIdel 将 AnyStat 转移到空闲状态,这是示例:

【讨论】:

  • 感谢您的帮助。仍然有问题......如果你能再次帮助我,我更新了我的问题......谢谢:)
  • 嗨,我想你可能误会了,应该没有必要再做一个 stopJump 状态,你只需要一个从跳转状态到空闲状态的触发器,在为了说服我们的项目,我们甚至从 anystate 触发到空闲状态,这将允许我们转移到空闲状态,无论我们之前的状态是什么。
  • 很高兴能帮上忙:D
  • 您好,首先在层次结构中选择游戏对象,然后在 GameObject 的顶部菜单下应该有一个 Break Prefab Instance 选项,这可能会有所帮助
  • 好的!我找到了!谢谢!!你是我的英雄!哈哈
猜你喜欢
  • 2021-05-10
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多