【Unity2D】角色动画的切换

动画状态转换

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

【Unity2D】角色动画的切换_第1张图片

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

【Unity2D】角色动画的切换_第2张图片

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

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

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

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

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

【Unity2D】角色动画的切换_第3张图片

 

 代码支持

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

这个根据自己的需要来做

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

 混合树

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

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

【Unity2D】角色动画的切换_第4张图片

 右键点击From New Blend Tree 创建混合树【Unity2D】角色动画的切换_第5张图片

 添加参数并为混合树配置参数【Unity2D】角色动画的切换_第6张图片

 点击右下角加号创建出运动   有几个运动状态就添加几个运动 然后设置好这些运动对于X方向和Y方向的改变(通过Pos X和Pos Y设置 )【Unity2D】角色动画的切换_第7张图片

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

【Unity2D】角色动画的切换_第8张图片

代码支持

 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();
        timer = changeTime;
        animator = GetComponent();
        // 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即配置完成

【Unity2D】角色动画的切换_第9张图片

你可能感兴趣的:(nginx,运维)