问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity2D动画制作:实现角色移动时播放对应动画

创作时间:
作者:
@小白创作中心

Unity2D动画制作:实现角色移动时播放对应动画

引用
CSDN
1.
https://blog.csdn.net/qq_55048532/article/details/139025601

在Unity2D游戏中,角色的移动动画是提升游戏体验的重要环节。本文将详细介绍如何使用Animator组件制作角色移动时播放对应的动画,包括制作动画混合树、编辑动画控制器以及编写相关的Ruby脚本。

一、制作动画混合树

  1. 打开Window->Animation->Animator,打开动画编辑窗口

  2. 点击想要编辑动画的游戏对象

  3. 在动画编辑窗口中新建一个混合树

二、通过动画控制器编辑动画在合适的时机播放

  1. 点击加号,新建两个Parameters(参数)LookX,LookY(图中是MoveX和MoveY)

  2. 右键混合树,添加4个Motion(动作)

  3. 修改BlendType(混合类型)的属性为2D Simple Directional(2D简单方向)

  4. 将4个Motion添加刚刚制作的4个AnimationClip资源

  5. 将两个参数调整为LookX和LookY(图中是MoveX和MoveY)

  6. 调整两个参数的值

  7. 按照相同的方法再制作一个Idle混合树

  8. 返回上一级,设置Idle混合树为层级默认状态

  9. 选中Idle混合树,点击Make Transition,再点击Move行为树,使Idle状态可以切换到Move状态

  10. 再使Move状态到Idle状态也建立连接

  11. 新建一个浮点型的Speed参数,点击Idle到Move的箭头,新建一个Conditions(条件)

  12. 将条件设置为Speed大于0.1

  13. 同理,将Move变为Idle的条件设置为Speed小于0.1

三、编辑Ruby脚本

注:在以下代码中,只显示本章节新编辑的代码,其他代码均省略

  1. 定义二维向量lookDirection,表示Ruby的朝向
public class Ruby : MonoBehaviour{
    // Ruby的朝向
    private Vector2 lookDirection = new Vector2(0, -1); // 初始时Ruby面朝下方
}
  1. 在Update方法中定义二维向量move表示要移动的方向和大小
public class Ruby : MonoBehaviour{
    // Ruby的朝向
    private Vector2 lookDirection = new Vector2(0, -1); // 初始时Ruby面朝下方
    void Update(){
        // horizontal和vertical分别是水平和竖直方向位移的大小
        Vector2 move = new Vector2(horizontal, vertical);
    }
}
  1. 当Ruby移动时,重新设置Ruby的朝向并进行归一化处理;给Animator组件中的参数赋值
public class Ruby : MonoBehaviour{
    // Ruby的朝向
    private Vector2 lookDirection = new Vector2(0, -1); // 初始时Ruby面朝下方
    void Update(){
        // horizontal和vertical分别是水平和竖直方向位移的大小
        Vector2 move = new Vector2(horizontal, vertical);
        // 当Ruby移动时
        if(!Mathf.Approximately(move.x, 0) || !Mathf.Approximately(move.y, 0)) {
            lookDirection.Set(move.x, move.y);
            lookDirection.Normalize(); // 对向量lookDirection进行归一化处理,使每个方向的值变为(-1,1)范围内的小数
        }
        // 给Animator组件中的参数赋值
        animator.SetFloat("LookX", lookDirection.x);
        animator.SetFloat("LookY", lookDirection.y);
        animator.SetFloat("Speed", move.magnitude);
    }
}

本章完。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号