Unity2D教程:人物移动动画,动画状态机之间的转化,动画卡顿问题

关注专栏,持续更新哦

教程总目录


  • 2D像素人物可以通过抬左脚和抬右脚以及原画三种照片完成动画效果

  • 把这三种图片水平翻转后,你就得到了所有需要的素材
    在这里插入图片描述

  • 最简单的正常动画逻辑需要4个动画,左idle,右idle,左walk和右walk。

  • idle直接让4张相同的原画就行
    在这里插入图片描述

  • walk则是左脚右脚左脚右脚左脚右脚,重复是为了看起来流畅点(1秒6个关键帧)
    在这里插入图片描述

  • 状态机的转换需要想一下

  • 我们设置了2个参数,speed和lookLeft,表示速度和朝向。

    • idle到walk:检测到speed>0.5触发,根据朝向判断哪个walk
    • 为了判断条件简单点,walk只设置到不同方向的walk和同向的idle,不设置不同方向的idle。
    • 同理左idle也不需要到右idle。

在这里插入图片描述

  • 此时逻辑正确了,但是你会发现转化很卡顿,因为需要把两个状态机之间的transition时间设置为0,以及has exit time去掉。
    在这里插入图片描述
  • 通过脚本设置朝向和速度(通过移动向量的长度设置)
void Update()
{
    // 移动相关
    float moveX = Input.GetAxisRaw("Horizontal");
    float moveY = Input.GetAxisRaw("Vertical");
    Vector2 moveDirection = new Vector2(moveX, moveY);
    Vector2 p = body.position;
    p += moveDirection * speed * Time.deltaTime;
    body.MovePosition(p);

    // 动画
    if (moveDirection.x != 0)
    {
        if (moveDirection.x == 1) lookLeft = false;
        else lookLeft = true;
    }
    anim.SetBool("lookLeft", lookLeft);
    anim.SetFloat("speed", moveDirection.magnitude);// 向量长度
    
}

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/106960968
今日推荐