Unity学习笔记(二)如何制作角色动画

前言

本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记

创建一个角色

我们的目的是创建一个可移动、跳跃、冲刺等动作的角色

需要的组件:Rigidbody(用于创建物理规则)、Collider(用于检测碰撞)、Sprite Renderer(用于渲染角色,放在动画子对象)、Material(材质,2D 物理引擎中对象的物理交互属性的工具)

步骤一:先创建一个Player对象

创建Player属性如下

步骤二:修改初始图形象

现在我们来改变它的形象,需要修改Sprite Renderer使用我们自己的图标,这里需要先将原始图进行分割

图片初始,这肯定不能在游戏中使用,我们需要对它进行分割

可以通过编辑,也可以通过选择其他的按钮完成切割,这里我们选择编辑

由于这张图人物大小不一,所以我们要手动设置切割大小,这里也有自动模型(类型)

我这里选择了 X = 69, Y = 44

效果如下

然后我们再讲切割好的图片放到 Sprite Renderer 的精灵这里

如果切割出来的图片太小了,可以通过这里进行微调

这里角色不在中心,进行微调即可

拓展

Warrior_Sheet-Effect (Texture 2D)

Warrior_Sheet-Effect (Texture 2D) 通常指的是用于游戏开发中的 **角色动画纹理图集(**Sprite Sheet)

什么是 Warrior_Sheet-Effect?
  1. 定义
    1. 它是一张包含多个角色动作帧的二维纹理图片,用于动画实现。
    2. 例如,一个"战士"的行走、攻击、跳跃等动作会分成若干帧,排列在一张大图中。
  2. 用途
    1. 用于实现 2D 动画效果
    2. 在游戏中通过播放这些帧,实现角色的连续动作,如挥剑、奔跑、受伤等。
  3. 效果
    1. 提供流畅的战士角色动画,提升游戏画面的动态表现力。
在 Unity 中使用 Warrior_Sheet-Effect

步骤 1:导入纹理

  1. 将图集文件(如 Warrior_Sheet-Effect.png)拖入 Unity 的 Assets 文件夹。
  2. 选中纹理,在 Inspector 面板中设置:
    1. Texture Type :选择 Sprite (2D and UI)
    2. Sprite Mode :选择 Multiple(多帧模式)。
    3. Pixels Per Unit:根据游戏需求设置像素与单位的比例。

步骤 2:切割图集

  1. 在纹理设置中点击 Sprite Editor
  2. 打开切割工具,选择:
    1. Slice TypeGrid by Cell SizeGrid by Cell Count
    2. 根据图集帧的大小或数量进行切割。
  3. 确保每一帧的边界正确,然后点击 Apply

步骤 3:创建动画

  1. Hierarchy 面板 中创建一个新的 GameObject 并附加 Sprite Renderer 组件。
  2. 打开切割后的图集,选择一组帧并拖入场景。
  3. Unity 会自动提示创建动画,保存为 .anim 文件。
  4. 在 Animator 面板中编辑动画的播放逻辑。
动画效果的优化
  1. 帧速率(Frame Rate)
    1. 在动画中调整帧速率,确保动作流畅但不过快(通常为 12~24 fps)。
  2. 循环动画
    1. 对于循环动作(如走路或奔跑),勾选 Loop
  3. 触发条件
    1. 结合 AnimatorC# 脚本,实现复杂的动画切换(如攻击时触发攻击动画)。
使用场景
  1. 战士角色动画
    1. 通过帧动画实现战士的攻击、行走、跳跃、受伤等动作。
  2. 特效动画
    1. 图集中可能包含技能特效(如剑光、爆炸效果),配合角色动画使用。
  3. 游戏 UI 或其他效果
    1. 适用于任何需要动态效果的 2D 场景。

制作角色动作的动画(Animator)

前期准备

将制作动画的窗口设置出来

在 Player 对象中创建子对象命名为 Animator,添加组件。

完成动画需要的组件:Sprite Renderer(渲染器)、Animator(动画)、C#脚本。

创建了 Animator 之后还需要创建 Animator Controller 来设置动画的状态

双击后,在动画器的窗口就可以看到当前的状态了

制作角色简单的动画

选择之前切割的图拉取到对应的片段中

效果如下

拓展

Animator?

Animator 是 Unity 中用于管理和控制动画的组件和系统,通过结合 动画片段(Animation Clips)状态机(State Machines)脚本触发器(Triggers),实现复杂的角色动作和动画效果。以下是 Animator 的详细介绍及使用方法:

1. 什么是 Animator?
  • Animator 组件
    • 挂载在游戏对象上,连接动画控制器(Animator Controller)。
    • 用于播放、控制和切换动画片段。
  • Animator Controller
    • 是一个图形化的动画状态机,定义了动画之间的切换逻辑。
2. Animator 的主要功能
  1. 播放动画
    1. 控制角色的行走、跑步、攻击等动作。
  2. 状态机管理
    1. 动画状态之间的转换由状态机(State Machine)完成,允许动画流畅过渡。
  3. 参数控制
    1. 通过 Animator 参数(如 boolfloatint)动态调整动画行为。
  4. 触发器(Trigger)
    1. 用于触发一次性动画,比如攻击动作。
  5. 混合树(Blend Tree **)**:
    1. 实现动作的平滑过渡(如行走到跑步的速度切换)。
3. 如何使用 Animator

步骤 1:添加 Animator 组件

  1. 选择一个游戏对象(如角色)。
  2. 在 Inspector 面板中,点击 Add Component,选择 Animator

步骤 2:创建 Animator Controller

  1. 右键点击 Assets > Create > Animator Controller
  2. 将创建的 Animator Controller 拖入对象的 Animator 组件的 Controller 槽位。

步骤 3:添加动画片段

  1. 双击打开 Animator Controller。
  2. 将动画片段(.anim 文件)拖入 Animator 面板。
  3. 设置初始状态:
    1. 右键点击一个动画片段,选择 Set as Layer Default State

步骤 4:设置动画切换

  1. 在 Animator 中点击一个状态(动画片段),右键选择 Make Transition
  2. 创建一个到目标状态的过渡。
  3. 设置过渡条件:
    1. 在 Animator 面板中,创建参数(如 isRunning)。
    2. 选中过渡箭头,设置条件(如 isRunning = true 时切换到跑步动画)。

步骤 5:通过脚本控制动画

使用代码动态控制 Animator 参数:

C# 复制代码
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 设置动画参数
        float speed = Input.GetAxis("Vertical");
        animator.SetFloat("Speed", Mathf.Abs(speed));

        if (Input.GetButtonDown("Jump"))
        {
            animator.SetTrigger("Jump");
        }
    }
}
4. Animator 的核心概念

状态(State)

  • 表示一个动画片段或动作的状态,例如 Idle、Run、Jump。
  • 每个状态可以对应一个动画片段。

过渡(Transition)

  • 状态之间的切换。
  • 通过设置条件(Parameters)和过渡时间(Transition Duration)实现流畅的切换。

参数(Parameters)

  • 动画切换的触发条件。
  • 参数类型:
    • Float:如角色速度。
    • Bool:如是否攻击。
    • Int:如动作模式编号。
    • Trigger:一次性触发动作。

混合树(Blend Tree**)**

  • 在同一个状态中,根据参数值平滑混合多个动画。
  • 常见用法:
    • 根据速度混合行走和跑步动画。
    • 根据角色角度混合转身动画。
5. 常见用法场景
  1. 角色动画
    1. 管理角色的待机、行走、攻击、跳跃等动作。
  2. 敌人 AI 动画
    1. 根据敌人的状态(巡逻、追击、攻击)切换动画。
  3. 技能特效
    1. 技能启动和结束动画,通过 Trigger 控制一次性播放。
  4. UI 动画
    1. 在界面中实现按钮按下或弹窗动画。
6. 常见问题及解决方案
  1. 动画切换卡顿
    1. 检查过渡时间是否过长。
    2. 确保没有不必要的过渡条件冲突。
  2. 动画循环问题
    1. 在 Animation Clip 的 Inspector 面板中,取消 Loop Time 勾选。
  3. 参数未更新
    1. 确保在代码中正确调用 SetFloatSetBoolSetTrigger 等方法。
  4. 动画过渡条件无效
    1. 确保所有相关参数在 Animator 面板中已正确配置。
7. 高级功能
  1. 层级(Layers)
    1. 用于处理多种动画叠加,例如角色奔跑时还可以播放上半身射击动作。
  2. IK **(Inverse Kinematics ,逆向动力学)**:
    1. 用于角色与环境的动态交互(如手部抓住物体)。
  3. 动画事件(Animation Events)
    1. 在动画帧中插入事件回调,触发脚本逻辑。
相关推荐
E___V___E10 分钟前
黑马 Cpp qt相关笔记
笔记
dal118网工任子仪17 分钟前
32.攻防世界Web_php_include
笔记·学习·安全·web安全·网络安全
加德霍克30 分钟前
Opencv之图像梯度处理和绘制图像轮廓
图像处理·人工智能·opencv·学习·计算机视觉
不当菜鸡的程序媛31 分钟前
GAN 是如何学习语义的?
人工智能·学习·生成对抗网络
LateBloomer7771 小时前
顺序队列的实现及其应用
数据结构·笔记·学习·循环队列
蓝白小手套1 小时前
【USB-HID】“自动化键盘“ - 模拟键盘输入
单片机·学习·计算机外设
『往事』&白驹过隙;1 小时前
数据结构与算法汇总整理篇——链表与二叉树(常用特性的概念及细节处理)
数据结构·c++·学习·leetcode·链表·面试·二叉树
紫电的学习笔记1 小时前
2450.学习周刊-2024年50周
学习
雨中奔跑的小孩1 小时前
爬虫学习案例4
爬虫·学习
【上下求索】2 小时前
学习笔记070——Java中【泛型】和【枚举】
java·笔记·学习