Unity_2D动画
2D动画
1. 序列帧动画(Sprite Animation)
1.1 基本概念
- 定义:通过快速播放一系列静态图片来创建动画效果
- 原理:利用人眼视觉暂留现象,连续播放多帧图片产生运动错觉
- 特点:制作简单、兼容性好、适合简单动画效果
1.2 核心组件
- Sprite Renderer:负责渲染精灵图片
- Animator:控制动画状态机和播放
- Animation Clip:存储序列帧动画数据
- Sprite Library:管理精灵资源库
1.3 创建流程
- 准备素材:制作或收集序列帧图片
- 导入设置:设置Texture Type为Sprite (2D and UI)
- 创建动画:选中多帧图片,右键Create → 2D Object → Sprites → Animation
- 配置参数:设置帧率、循环模式等
- 应用动画:将动画片段添加到Animator Controller
1.4 关键参数设置
- Samples:动画帧率,决定播放速度
- Loop Time:是否循环播放
- Loop Pose:是否循环姿势
- Cycle Offset:循环偏移量
- Root Transform Position (Y):根变换位置Y轴
- Root Transform Rotation:根变换旋转
- Root Transform Scale:根变换缩放
1.5 代码控制示例
using UnityEngine;public class SpriteAnimationController : MonoBehaviour
{private Animator animator;void Start(){animator = GetComponent<Animator>();}// 播放指定动画public void PlayAnimation(string animationName){animator.Play(animationName);}// 设置动画速度public void SetAnimationSpeed(float speed){animator.speed = speed;}// 检查动画是否播放完成public bool IsAnimationFinished(string animationName){return animator.GetCurrentAnimatorStateInfo(0).IsName(animationName) &&animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f;}
}
1.6 优化技巧
- 图集合并:将多个序列帧合并到一张纹理中
- 帧率控制:根据设备性能调整动画帧率
- 内存管理:及时释放不使用的动画资源
- LOD系统:根据距离使用不同精度的动画
1.7 常见应用场景
- 角色移动:走路、跑步、跳跃等基础动作
- UI动画:按钮点击、界面切换效果
- 特效动画:爆炸、粒子效果等
- 环境动画:水流、火焰、云朵等
1.8 Unity使用流程
┌─────────────────────────────────────────────────────────────┐
│ 序列帧动画创建流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 准备素材 │───▶│ 导入设置 │───▶│ 创建动画 │ │
│ │ 序列帧图片 │ │Sprite类型 │ │Animation │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 配置参数 │◀───│ 应用动画 │◀───│ 预览效果 │ │
│ │ 帧率循环等 │ │Animator │ │ 实时播放 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
1.9 详细操作步骤
步骤1: 素材准备
├─ 收集或制作序列帧图片
├─ 确保图片尺寸一致
└─ 命名规范(如:walk_001, walk_002...)步骤2: Unity导入
├─ 将图片拖入Project窗口
├─ 选中所有图片
├─ 设置Texture Type为Sprite (2D and UI)
└─ 设置Pixels Per Unit步骤3: 创建动画
├─ 选中多帧图片
├─ 右键 → Create → 2D Object → Sprites → Animation
├─ 命名动画文件
└─ 设置动画参数步骤4: 应用动画
├─ 创建GameObject
├─ 添加Sprite Renderer组件
├─ 添加Animator组件
├─ 将动画片段拖入Animator Controller
└─ 设置默认动画状态
2. 骨骼动画(Skeletal Animation)
2.1 基本概念
- 定义:通过骨骼系统控制2D精灵的变形和运动
- 原理:使用骨骼链和蒙皮技术,实现自然的关节运动
- 特点:动画流畅、内存占用小、适合复杂角色动画
2.2 核心组件
- Bone:骨骼节点,控制变形点
- Skin:蒙皮网格,定义变形区域
- Weight:权重值,控制骨骼对顶点的影响程度
- IK(反向运动学):自动计算关节角度
2.3 工作流程
- 骨骼绑定:在2D精灵上创建骨骼结构
- 权重绘制:设置每个顶点受骨骼影响的程度
- 关键帧设置:在时间轴上设置骨骼位置和旋转
- 动画预览:实时查看动画效果
- 导出应用:将动画应用到游戏对象
2.4 技术优势
- 内存效率:相比序列帧动画占用更少内存
- 动画质量:可以实现更自然的关节运动
- 可重用性:同一骨骼结构可以应用不同动画
- 实时控制:可以动态调整动画参数
2.5 适用场景
- 角色动画:复杂的角色动作和表情
- 机械动画:机械臂、车辆等机械结构
- 生物动画:动物、怪物等有机体
- 特效动画:复杂的变形和扭曲效果
2.6 开发工具
- Unity 2D Animation Package:官方2D动画工具包
- Spine:专业的2D骨骼动画软件
- DragonBones:开源的2D动画解决方案
- Live2D:专注于角色表情和口型同步
2.7 蒙皮系统(Skinning System)
- 蒙皮基本概念:蒙皮决定了骨骼主要控制哪一部分
- 自动蒙皮(Auto Geometry):
- Outline Detail:边缘细节,值越大轮廓越细致
- Alpha Tolerance:阿尔法公差值,控制蒙皮细节
- Subdivide:细化程度,控制蒙皮细节
- Weights:是否自动设置权重,一般勾选
- Generate For All Visible:为所有可见对象生成蒙皮
- 编辑蒙皮(Edit Geometry):
- Create Vertex:创建顶点
- Create Edge:创建边线
- Split Edge:拆分边,用一个新的顶点分离一个边
2.8 权重编辑系统
- 自动权重(Auto Weights):自动计算并应用初始权重到顶点
- 权重滑块(Weight Slider):
- Mode(计算模式):
- Add And Subtract(加减法):用于增加或减少权重
- Grow And Shrink(增长和收缩):用于扩展或收缩权重影响区域
- Smooth(平滑):用于混合权重,创建更平滑的变形
- Bone(设置权重的骨骼):指定要调整权重的具体骨骼
- Normalize(标准化设置):确保单个顶点的所有骨骼权重总和为1(100%)
- Amount(数量级):控制权重调整操作的强度
- Mode(计算模式):
- 顶点权重编辑:显示和编辑当前选中顶点受各骨骼影响的程度
2.9 骨骼操作工具
- Preview Pose(预览模式):可以预览动作并不会真正改变设置
- Edit Bone(编辑骨骼):可以改变骨骼的位置、长度、方向、名称等
- Create Bone(创建骨骼):创建新的骨骼节点
- Split Bone(拆分骨骼):将一个骨骼一分为二
2.10 反向动力学(Inverse Kinematics, IK)
- 基本概念:IK是一种动画技术,通过指定末端效应器的目标位置,自动计算中间关节的角度和位置
- 工作原理:从目标位置反向计算,通过数学算法确定骨骼链中每个关节的旋转角度
- 应用场景:角色抓取物体、脚部贴合地面、手部跟随鼠标等需要精确控制末端位置的情况
- IK约束类型:
- Chain (CCD):可以自定义影响N个关节点,不能反向
- Chain (FABRIK):可以自定义影响N个关节点,可以反向
- Limb:只会影响3个关节点
- 设置参数:
- Effector:默认的IK点位置
- Target:会根据IK点位置生成真正的IK点对象
- Weight:权重,当有多个IK控制同一点时权重会影响控制的百分比
- Chain Length:IK影响的骨骼数量
- Iterations:算法运行的次数
- Tolerance:容错程度
- Velocity:速度
- Constrain Rotation:约束旋转程度
- Solve from Default Pose:从默认姿势进行求解计算
- Flip:反向(仅Limb Solver)
- 使用技巧:
- 合理设置迭代次数和容错度,平衡精度和性能
- 使用权重控制多个IK的混合效果
- 从默认姿势求解可以获得更稳定的结果
2.11 IK系统优势总结
2.11.1 动画质量提升
- 自然运动:IK可以产生更自然的关节运动,避免机械化的角度变化
- 精确控制:能够精确控制末端效应器的位置,实现复杂的交互动作
- 物理真实:模拟真实世界的物理约束,如重力、碰撞等
2.11.2 开发效率提升
- 减少关键帧:不需要手动设置每个关节的关键帧,大大减少动画制作时间
- 实时调整:可以在运行时动态调整目标位置,实现响应式动画
- 重用性强:同一IK设置可以应用到不同的动画序列中
2.11.3 技术优势
- 算法稳定:CCD和FABRIK等算法经过优化,计算稳定可靠
- 性能优化:相比手动关键帧动画,IK计算性能更好
- 约束灵活:支持多种约束类型,满足不同动画需求
2.12 Unity使用流程
┌─────────────────────────────────────────────────────────────┐
│ 骨骼动画工作流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 准备精灵 │───▶│ 创建骨骼 │───▶│ 绑定蒙皮 │ │
│ │ 2D图片资源 │ │ 骨骼结构 │ │ 权重设置 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 设置权重 │◀───│ 创建动画 │◀───│ 预览效果 │ │
│ │ 顶点影响 │ │ 关键帧 │ │ 实时变形 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
2.11 详细操作步骤
步骤1: 骨骼创建
├─ 打开2D Animation Package
├─ 选择Edit Bone模式
├─ 在精灵上创建骨骼链
├─ 设置骨骼层级关系
└─ 命名骨骼节点步骤2: 蒙皮设置
├─ 选择Auto Geometry
├─ 调整Outline Detail(建议值:10)
├─ 设置Alpha Tolerance(建议值:10)
├─ 调整Subdivide(建议值:20)
├─ 勾选Weights
└─ 点击Generate For All Visible步骤3: 权重编辑
├─ 选择Edit Geometry模式
├─ 使用Weight Slider工具
├─ 选择计算模式(Add/Subtract, Grow/Shrink, Smooth)
├─ 设置目标骨骼
├─ 调整权重值
└─ 确保Normalize已勾选步骤4: 动画制作
├─ 切换到Preview Pose模式
├─ 设置关键帧
├─ 调整骨骼位置和旋转
├─ 预览动画效果
└─ 导出动画数据