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 Type :Grid by Cell Size 或 Grid 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. 结合 Animator 和 C# 脚本,实现复杂的动画切换(如攻击时触发攻击动画)。
使用场景
  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 参数(如 bool、float、int)动态调整动画行为。
  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. 确保在代码中正确调用 SetFloat、SetBool、SetTrigger 等方法。
  4. 动画过渡条件无效 :
    1. 确保所有相关参数在 Animator 面板中已正确配置。
7. 高级功能
  1. 层级(Layers) :
    1. 用于处理多种动画叠加,例如角色奔跑时还可以播放上半身射击动作。
  2. IK **(Inverse Kinematics ,逆向动力学)**:
    1. 用于角色与环境的动态交互(如手部抓住物体)。
  3. 动画事件(Animation Events) :
    1. 在动画帧中插入事件回调,触发脚本逻辑。
相关推荐
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊4 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
霍霍的袁4 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio