【Unity2D】角色动画的切换

动画状态转换

第一种方法是设置一个中间状态,从中间状态向其余各种状态切换,且各状态向其他状态需要设置参数

实现动作转移时右键点击Make Transition即可 

实现动画转移需要设置条件

点击一种动画到另一种动画的线 ,然后点击加号添加Condition 比如机器人从向左走切换到向右走的条件是MoveX(向左的运动参数)大于0 

同时,为了使得动画切换流畅 ,需要将Has Exit Time取消勾选 

同时点击Settings,将Transation Duration(转移间隔)设置为0

其他的动画切换也是这样进行

 

 代码支持

direction是角色的朝向,我将direction的数值设置为1或-1

这个根据自己的需要来做

       animator.SetFloat("MoveX",direction);
       animator.SetFloat("MoveY",direction);

 混合树

混合树是更为简单的一种方法

在Animations 文件夹中选定为robot创建Animation Controller后,点击进入

 右键点击From New Blend Tree 创建混合树

 添加参数并为混合树配置参数

 点击右下角加号创建出运动   有几个运动状态就添加几个运动 然后设置好这些运动对于X方向和Y方向的改变(通过Pos X和Pos Y设置 )

 然后将预先准备好的动画拖动到Motion中(根据参数确定每个Motion对应的动画)

代码支持

 private void PlayMoveAnimation()
    {
        if (vertical)//垂直轴向动画的控制
        {
            animator.SetFloat("MoveX",0);
            animator.SetFloat("MoveY",direction);
        }
        else//水平轴向动画的控制
        {
            animator.SetFloat("MoveY",direction);
            animator.SetFloat("MoveY",0);
        }
    }
 void Start()
    {
        Rigidbody2D1 = GetComponent<Rigidbody2D>();
        timer = changeTime;
        animator = GetComponent<Animator>();
        // animator.SetFloat("MoveX",direction);
        // animator.SetFloat("MoveY",direction);
        PlayMoveAnimation();
        isBroken = true;
    }
    
    private void Update()
    {
        //修复好让机器人停止移动
        if (!isBroken)
        {
            return;
        }
        
        timer -= Time.deltaTime;
        if (timer < 0)
        {
            direction = -direction;
            PlayMoveAnimation();
            timer = changeTime;
        }
    }

    void FixedUpdate()
    {
        Vector2 position = Rigidbody2D1.position;
        if (vertical)//垂直移动
        {
            position.y += Time.deltaTime * speed*direction;
            animator.SetFloat("MoveX",0);
            animator.SetFloat("MoveY",direction);
        }
        else//水平移动
        {
            position.x += Time.deltaTime * speed*direction;
            animator.SetFloat("MoveX",direction);
            animator.SetFloat("MoveY",0);
        }
        //将终点告知刚体组件,让刚体组件来进行位移
        Rigidbody2D1.MovePosition(position);
        
    }

1、FixedUpdate()

    固定更新方法,和物理相关的操作代码,都要写在此方法中。

    固定更新的时间是0.02s,1秒执行50次,可在Edit--->Project Settings--->Time面板中的Fixed Timestep查看。

2、Update()

    每帧执行一次。

    画面每渲染一次,就是一帧,每帧的时间是不固定的。
————————————————
版权声明:本文为CSDN博主「_Wyhon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hang981601026/article/details/79640678

  为角色配置动画

将设置好的动画控制器拖动到角色的Animator中的Controller即配置完成

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值