Unity中的动画系统

2023-11-14

学习动画系统过程中的一些笔记

概述

Unity 的动画系统基于动画剪辑(Animation Clips)的概念,每个动画剪辑可以被认为是一个单一的线性记录,由动画状态机(Animator Controller)将一个个线性记录组成类似结构化流程图的系统。动画状态机可以跟踪当前正在播放的动画剪辑,以及当动画剪辑应该改变或混合在一起时的状态信息。

Unity动画组件

Animator

Animator组件用于将动画分配给场景中的GameObject。面板及各项参数说明如下:

参数 说明
Controller 添加在当前角色上的 Animator 控制器
Avatar 当前角色的 Avatar 系统(如果这个 Animator 使用人物角色)
Apply Root Motion 从动画本身或从脚本控制角色的位置和旋转
Update Mode 动画的更新模式
-Normal 正常模式,与 Update 更新同步。动画的速度匹配当前的时间缩放,如果时间缩放放缓,动画也会放慢速度
-Animate Physics 动画与 Fixed Update 更新同步(即随同物理系统)。如果动画的物体与物理相互作用,用户应该使用该模式
-Unscaled Time 更新动画与 Update 更新同步,但动画的速度忽略时间的缩放
Culling Mode 动画的裁剪模式
-Always Animate 动画一直会更新,不会裁剪
-Cull Update Transforms 动画的 Transforms 重定向、IK 和修改转换在渲染器不可见时被禁用
-Cull Completely 当动画对象的渲染器不可见时完全禁用(即不可见时停止播放动画)

Layer

Unity 使用“Layer”(动画层)来管理身体不同部位的复杂状态机。比如用户可以使用下半身动画层来管理走动 、 跑动动作;使用上半身动画层来控制投掷 、射击动作。

动画层面板各项参数说明如下:

参数 说明
Weight 代表当前层的权重。比如基础层(权重固定为1)人物的手为下垂状态,第二层人物的手为举起状态,权重设为0.5,则会产生人物的手举在半空的状态
Mask 遮罩。可以通过创建遮罩来屏蔽当前层影响的关节
Blending Override(覆盖)意味着来自其他图层的信息将被忽略;Additive(附加)意味着动画将被添加到以前的图层之上
Sync 同步层。开启后可以指定一个层使当前层的所有状态同步,不可编辑但可以替换动画。可以用来做负伤动画(动画不同但状态相同)
Timing 开启Sync后才能启用。启用后,同步层可以控制被同步层的持续时间
IK Pass 开启后脚本才能控制IK

Parameters

Parameters面板可以添加如下类型的参数,这些参数可以通过脚本控制,并以此来控制动画状态之间的切换。

在脚本中可以通过如下方式控制参数。

Animator Controller

动画控制器对其中使用的动画片段进行了引用,并使用所谓的状态机管理各种动画状态和它们之间的转换。

动画状态

动画状态是动画状态机中内建的基本模块。

检视面板中的各项参数说明如下:

参数 说明
Motion 这个状态的动画片段
Speed 动画的默认速度
-Multiplier 速度的乘数
Parameter 是否在运行时使用动画控制器的参数调整此属性,即使用Parameters控制这个属性
Motion Time 动画播放时长
Mirror 是否将动画镜像
Cycle Offset 周期偏移。即从动画的哪一个位置开始播放
Foot IK 是否在这个动作中使用脚部IK动画
Write Defaults 是否对没有动画的属性写回默认值
Transitions 从这个状态产生的状态转移
Animation Transition

动画过渡,用来控制各个状态之间的切换。

检视面板中的各项参数说明如下:

参数 说明
Has Exit Time 是否等动画结束后切换
Exit Time 退出当前状态的时间
Fiexd Duration 如果勾选,则转换持续时间以秒为单位;反之,以%为单位
Transition Duration 转换时间
Transition Offset 在转换到的目的状态过程中开始播放的时间的偏移量
Interruption Source 使用它来控制这种转换可能被中断的情况
Ordered Interruption 确定当前转换是否可以独立于其顺序中的其他转换中断
Conditions 决定该动画过渡在何时被触发

Animation

Unity中用于编辑物体动画的系统,总体上与视频剪辑类似,不再过多赘述。

从外部导入动画资源

Unity 可以导入原生的 Maya 文件(.mb 或者 .ma)、3ds Max(.max)、Cinema 4D 文件(.c4d)以及一般的 FBX 文件。

导入的模型可以通过Rig面板进行骨骼绑定

检视面板中的各项参数说明如下:

参数 说明
Animation Type 动画类型。
-Legacy 传统的动画类型,如果设置为这种类型,模型下会自动生成一个Animation文件,同时游戏物体上会自动挂载Animation组件。这种方式无法通过状态机控制动画
-Generic 通用的动画类型,如果设置为这种类型,需要创建骨骼映射,模型下自动生成Avatar文件,游戏物体会自动挂载Animator组件
-Humanoid 人型动画类型,如果设置为这种类型,可以进行动画重定向(将一组动画应用到不同的人型角色上),同时该类型可以通过动画直接控制游戏物体的移动
Avatar Definition Avatar定义,可以选择从当前模型创建,也可以选择复用其他模型的Avatar
Skin Weights 影响给定顶点的最大骨骼数量,默认为4个,可以自定义
Optimize Game Objects 优化游戏物体,勾选后可以提高性能

点击Configure按钮可以进入骨骼编辑界面:

在Animation界面可以对动画片段进行剪切、设定循环、轴向锁定等设置。

IK动画

IK动画即逆向运动学功能。它可以通过给定的末端节点位置,逆推出节点链上所有其他节点的合理位置。例如希望角色的手臂触碰一个固定的物体,或脚站立在不平坦的路面上等。
常用的设置IK动画的方法如下:

分别是设置IK的位置、旋转、位置权重、旋转权重。

MatchTarget

MatchTarget方法可以提高动画的匹配度,比如人物进行翻墙动作时,原动画的手部可能并没有接触到墙壁,通过这个方法可以很好地解决。

动画混合

在状态机界面通过Create State From New Blend Tree创建一个混合树。

1D混合

2D混合

2D混合树就是通过控制两个变量进行状态间的混合。

2D混合树分为如下几种类型:

第一种适用于没有相同方向的动画混合;
第二种适用于有相同方向的动画,需要有一个(0,0)的原点;
第三种适用于两个参数类型不同的动画,如角速度和线速度。

Direct混合

将动画参数直接映射到子混合树的权重,适用于脸部动画的混合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity中的动画系统 的相关文章

随机推荐

  • 数字信号带宽讲解

    引言 在学习和工作中 经常和数字信号打交道 但是经常会接触到数字信号的带宽 对于这一概念 我理解的并不是很透彻 所以今天来抽丝剥茧 把这一概念彻底理解清楚 内容引申 要理解数字信号带宽 就先要了解信号的上升时间 上升时间 上升时间的概念 任
  • Win定时任务更新SVN库

    找到计算机管理 右击任务计划程序库 gt 创建基本任务 填写好名称和描述 NEXT NEXT NEXT 这里选择好svn exe 参数配置成 update D your dictionary NEXT 设置属性 选择触发器 gt 编辑 设置
  • 修改docker容器中文件(配置文件)

    背景 在使用docker搭建hadoop时需要修改docker容器里的文件 不想装ubutu所以在容器里用不了vim命令修改文件 1 查看所有容器名称和基本信息 docker ps 2 查看某个容器信息 docker inspect 容器名
  • 了解数据库的作用、特点及关系型数据库管理系统

    学习目标 能够知道数据库的作用数据库和数据库管理系统的关系 一 数据库 1 数据库的介绍 数据库就是存储和管理数据的仓库 数据按照一定的格式进行存储 用户可以对数据库中的数据进行增加 修改 删除 查询等操作 2 数据库的分类 关系型数据库
  • 干货渗透测试面试题汇总

    干货 渗透测试面试题汇总 以下为信息安全各个方向涉及的面试题 星数越多代表问题出现的几率越大 没有填答案是希望大家如果不懂能自己动手找到答案 祝各位都能找到满意的工作 注 做这个List的目标不是全 因为无论如何都不可能覆盖所有的面试问题
  • c++,父类引用指向子类对象,虚函数

    include
  • 还不错的全民采矿小程序源码+代码已开源

    正文 还不错的全民采矿小程序源码 代码已开源 可配合流量主和激励视频 程序是单开版的 一个站点只能单个平台使用此应用 一个小程序使用此应用 下方图片是小程序工具介绍 下方是程序介绍 程序 lanzou com iRgwE04a5d0d 图片
  • 基于嵌入式Linux/Qt 开发RFID智能仓储指纹管理系统

    基于嵌入式Linux Qt 开发RFID智能仓储指纹管理系统 Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架 它包括一个直观的API和一个丰富的类库 以及用于GUI开发和国际化的集成工具 另外它支持Java 和C 开发 利用它 我
  • AIX下装unzip和gzip

    做个标注 AIX下安装oracle需要解压zip文件 所以需要安装unzip文件包 首先确定aix里有没有rpm rte包 lslpp l grep i rpm rte 如果没有的话需要用aix安装盘安装这个包 我的系统里现在有这个包了 就
  • Deque与Stack实现栈的区别

    使用Deque 允许两头都进 两头都出 这种队列叫双端队列 Double Ended Queue 简称Deque Java集合提供了接口Deque来实现一个双端队列 它的功能 既可以添加到队尾 也可以添加到队首 既可以从队首获取 又可以从队
  • Cloudstack常用端口(Ports used by CloudStack)

    Cloudstack常用端口 Ports used by CloudStack 管理服务器 8080 主界面 授权API端口 8096 用户 客户端连接CS管理端 不可靠的 8787 CloudStack Tomcat debug sock
  • 华为OD机试真题- 基站维修工程师【2023Q1】【JAVA、Python、C++】

    题目描述 小王是一名基站维护工程师 负责某区域的基站维护 某地方有n个基站 1
  • vue中pc端大屏怎么进行rem适配(lib-flexible + postcss-pxtorem)

    使用 插件 lib flexible 和 postcss pxtorem 进行是适配 一共是两个步骤 当我们在进行适配的时候 如果只将当前屏幕分成几份的话 那么在后面写样式的时候 样式的单位需要写成rem 但是这里我们在进行完 postcs
  • 多线程与高并发

    volatile CAS 无锁优化 Unsafe Synchronized volatile CAS Atomic gt CAS LongAdder 使用的分段锁 increment gt Sync Atomic LongAdder Ree
  • ios 微信小程序 chooseImage 相机拍照跳转页面崩溃

    问题描述 功能需求 拍照或选择图片 然后跳转页面裁剪上传头像 一开始使用 chooseImage 本人的小小安卓机和测试的ios手机都是没有问题的 后来同事的 iphone 13 mini 一试拍照跳转页面就崩溃了 一开始一筹莫展还在各处搜
  • angular入门

    架构模式 MVC gt MVP gt MVVM angular cli angular cli angular脚手架 一键构建angular项目 常用指令 ng help 查看所有指令 ng new projectName 创建angula
  • kafka实践(一):Kafka入门经典教程(转贴)

    原blog 地址 http blog csdn net hmsiwtv article details 46960053 问题导读 1 Kafka独特设计在什么地方 2 Kafka如何搭建及创建topic 发送消息 消费消息 3 如何书写K
  • java图书管理系统(IO流)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 基本结构 一 图书信息管理 1 book类 2 booklist类 1 add 2 query 3 sort 4 change 5 delete 6 write 和
  • 手把手带你做项目2:搜索引擎(附源码)

    Java API 文档搜索引擎 1 项目介绍 1 认识搜索引擎 2 搜索的核心思想 3 项目的目标 2 项目准备 1 需要的资源 2 创建web项目 3 开发步骤 1 创建三个 JavaBean 公共模块 2 预处理 解析本地 html 文
  • Unity中的动画系统

    学习动画系统过程中的一些笔记 概述 Unity 的动画系统基于动画剪辑 Animation Clips 的概念 每个动画剪辑可以被认为是一个单一的线性记录 由动画状态机 Animator Controller 将一个个线性记录组成类似结构化