当前位置: 首页 > news >正文

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 参数:

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. 在动画帧中插入事件回调,触发脚本逻辑。

http://www.mrgr.cn/news/80161.html

相关文章:

  • 专题三:简单多状态 dp 问题
  • 多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合
  • Mysql中的sql语句怎么执行的?
  • vue canvas 绘制选定区域 矩形框
  • AGCRN论文解读
  • kv类型算子使用
  • langchain 结构化输出
  • LeetCode hot100-74
  • React 内置的Hook学习
  • Flink CDC 读取oracle库数据性能优化
  • Z240001 基于Java+MySQL+SpringBoot+Vue实现的酒店管理系统的设计与实现
  • Java代审之常见的文件读取方法
  • 方法引用和lambda表达式的奥妙
  • 电感2222
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍01
  • freeswitch(开启支持MCU视频会议,使用mod_av模块)
  • 设计一个基础JWT的多开发语言分布式电商系统
  • Python课设-谁为影狂-豆瓣数据【数据获取与预处理课设】
  • 前端(五)css属性
  • C++知识整理day5容器——string容器
  • SQL server学习03-创建和管理数据表
  • 【arm】程序跑飞,SWD端口不可用修复(N32G435CBL7)
  • 40 list类 模拟实现
  • C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型2 处理连接字符串
  • 利用ESP-01S中继实现STM32F103C8T6与MQTT服务器的串口双向通信
  • Linux:Git