U3L18-7——动作目标匹配
U3L18-7——动作目标匹配
动作目标匹配
动画目标匹配主要指的是
当游戏中角色要以某种动作移动,该动作播放完毕后,人物的手或者脚必须落在某一个地方
比如:角色需要跳过踏脚石或者跳跃并抓住房梁
那么这时我们就需要动作目标匹配来达到想要的效果
本章代码关键字
123animator.MatchTarget() //动画目标匹配的方法,使某个动画能让该对象的某个点在动画播放期间精确的移动到某个目标点上AvatarTarget //骨骼目标的枚举,在MatchTarget()方法里用来表示骨骼上的哪个地方的位置用来匹配目标位置MatchTargetWeightMask() //结构体,用来记录XYZ方向以及角度变化的权重
如何实现动画目标匹配
Unity中的Animator提供了对应的函数来完成该功能,使用步骤是
找到动作关键点位置信息(比如起跳点,落地点,简单理解就是真正可能产生位移的动画表现部分)
将关键信息传入MatchTargetAPI中
MatchTarget
动画目标匹配的方法
**注意!调用匹配动画的时机有一些限制 ——> ** ...
U3L18-6——动画IK控制
U3L18-6——动画IK控制
在2D骨骼动画里已经讲过一些关于IK的内容 ——> U3L16-1-d——2D Animation 反向动力学IK
IK
在骨骼动画中,构建骨骼的方法被称为正向动力学
它的表现形式是,子骨骼(关节)的位置根据父骨骼(关节)的旋转而改变
用我们人体举例子
当我们抬起手臂时,是肩部关节带动的整个手臂的运动,用父子骨骼理解的话就是父带动了子
而IK全称是Inverse Kinematics,翻译过来的意思就是反向动力学的意思
它和正向动力学恰恰相反
它的表现形式是,子骨骼(关节)末端的位置改变会带动自己以及自己的父骨骼(关节)旋转
用我们人体举例子
当我们拿起一个杯子的时候是用手掌去拿,以杯子为参照物,我们移动杯子的位置,手臂会随着杯子一起移动
用父子骨骼理解的话就是子带动了父
本章代码关键字
123456789101112private void OnAnimatorIK(int layerIndex) { } //主要处理IK运动相关逻辑的函数,在Update之后LateUpdate之前调用animator.SetLookA ...
U3L18-5——动画子状态机
U3L18-5——动画子状态机
子状态机
子状态机顾名思义就是在状态机里还有一个状态机
它的主要作用就是某一个状态时由多个动作状态组合而成的复杂状态
比如某一个技能它是由3段动作组合而成的,蹲下,开火,站起
当我们释放这个技能时会连续播放这3个动作
那么我们完全可以把他们放到一个子状态机中
创建子状态机
在Animator Controller窗口中
右键->Create Sub-State Machine
图标为:
编辑子状态机
注意:子状态机和外部状态的相互连接方式****直接在外部将子状态机和某个状态连接一般是无效且多余的(会显示为灰色)
子状态机连接到外部时,有两种选项:
一个是连接到某个状态(上一层的某个状态)
一个是连接到状态机(层级)
如果是连接到某一层,则直接从该层的默认动画开始播放,
而与在外部为该子状态机连接到的哪个状态无关。
如果是连接到某个状态,在外部该子状态机会自动和那个状态连线
U3L18-4——动画2D混合
U3L18-4——动画2D混合
1D混合和2D混合
1D混合是用一个参数控制动画的混合,之所以叫1D是因为一个参数可以看做是1维线性的
2D混合你可以简单理解是用两个参数控制动画的混合,之所以叫2D是因为两个参数可以看做是2维平面xy轴的感觉
2D混合的种类
创建2D混合树还是和创建1D混合一致
但是需要在名字下方的修改混合类型(Blend Type)
英文混合模式名
中文混合模式名
作用和示例
2D Simple Directional
2D简单定向模式
运动表示不同方向时使用。比如向前、后、左、右走
2D Freeform Directional
2D自由形式定向模式
同上,运动表示不同方向时使用,但是可以在同一方向上有多个运动。比如向前跑和走
2D Freeform Cartesian
2D自由形式笛卡尔坐标模式
运动不表示不同方向时使用。比如向前走不拐弯,向前跑不拐弯,向前走右转,向前跑右转
Direct
直接模式
自由控制每个节点权重,一般做表情动作
前三种方式只是针对动作的不同采用不同的算法来进行混合的
第四种可以用多个参数进行融合
混合 ...
U3L18-3——动画1D混合
U3L18-3——动画1D混合
动画混合
游戏动画中常见的功能就是在两个或者多个相似运动之间进行混合
比如
根据角色的速度来混合行走和奔跑动画
根据角色的转向来混合向左或向右倾斜的动作
你可以理解是高级版的动画过渡
之前我们学习的动画过渡是处理两个不同类型动作之间切换的过渡效果
而动画混合是允许合并多个动画来使动画平滑混合
如何在状态机窗口创建动画混合状态
在Animator Controller窗口
右键->Create State->From New Blend Tree
1D混合的使用
1D混合就是通过一个参数来混合子运动
注意:往混合树里面加入动作时需要找到动画文件进行关联
参数相关
Parameter 参数,用于控制混合的参数,在参数列表中的参数
蓝色图像 可以在这里控制n个动画的阈值
Motion 关联的动画列表,可以用鼠标改变顺序
Threshold 对应动作的临界阈值
当等于这个值时动作权重最大(完全播放该动作)
这个值可以完全自由控制,数值范围不定
控制动作的播放速度
是否镜像动作
Automate Th ...
U3L18——3D动画相关
U3L18——3D动画相关
本章内容大量涉及Animator,具体内容看这里 ——> U3L14——Animator动画状态机
相关学习内容
3D动画的使用
动画分层和遮罩
动画1D混合
动画2D混合
动画子状态机
动画IK控制
动作目标匹配
Statemachinebehaviour 状态机行为脚本
状态机复用
U3L18-2——动画分层和遮罩
U3L18-2——动画分层和遮罩
本章代码关键字
12animator.GetLayerIndex() //通过层级名字获取索引animator.SetLayerWeight(,); //设置某个层级的权重
动画分层的主要目的
动画分层的作用
游戏中会有这样的需求
人物健康状态时播放正常动画
人物非健康状态时播放特殊动画
比如血量低于一定界限,人物的大部分动作将表现为虚弱状态
我们可以利用动画分层来快速实现这样的功能
动画分层和动画遮罩结合使用
3D游戏中我们常常会面对这样的需求
人物站立时会有开枪动作
人物跑动时会有开枪动作
人物蹲下时会有开枪动作
从表现上来看光是开枪动作可能就有3种
如果要让美术同学做3种开枪动作费时又费资源
我们是否可以这样做
比如开枪动画只影响上半身
下半身根据实际情况播放站立,跑动,蹲下动作
通过上下半身播放不同的动画就可以达到动画的组合播放
动画分层的主要就是达到这两个目的
两套不同层动作的切换
结合动画遮罩让两个动画叠加在一起播放
提升动画多样性,节约资源
利用动画分层我们可以做到
上下半身播放两个动画进行组合,比如上半身扔炸 ...
U3L18-1——3D动画的使用
U3L18-1——3D动画的使用
使用导入的3D动画
将模型拖入场景中
为模型对象添加Animator脚本
为其撞见Animator Controller动画控制器(状态机)
将想要使用的相关动作 拖入Animator Controller动画控制器(状态机)窗口
在Animator Controller动画控制器(状态机)窗口编辑动画关系(使用之前学习的状态机相关知识)
代码控制状态切换(和状态机的代码控制内容差不多)
注意点
Has Exit Time是否启用 如果希望瞬间切换动画不需过多等待,取消该选项
Can Transition To self是否启用 如果希望自己不要打断自己,取消该选项
状态设置相关参数
我们可以选中状态机窗口中的 某一个状态 为其设置相关参数
我们可以称之为动画状态设置
主要设置的是 当前状态的播放速度等等细节
Motion:分配给此状态的动画剪辑
Speed:动画的默认速度
Multiplier:控制速度的乘数
如果要使用需要勾选的Parameter选中配合的参数float类型
Motion Time:运动的时间
如果要使用需要勾选的P ...
U3L17-3-d——预览窗口
U3L17-3-d——预览窗口
动画预览
动画剪辑名称
IK:是否开启脚步反向动力学预览
2D:2D模式预览
箭头:是否显示轴心和质心辅助图标
切换预览操作的游戏对象,向预览窗口拖模型可以直接替换模型
播放暂停键 时间轴(可拖动预览)
播放速度
播放状态标记 秒、百分比、帧编号显示当前播放到的位置
可以为资源添加标签Tag
AB包相关设置,AB包知识时会讲解
U3L17-3-c——动画剪辑属性其它设置
U3L17-3-c——动画剪辑属性其它设置
Curves 曲线
曲线可以配合Animator作为参数
通过加入曲线值可以利用他标记重要的点
可以修改曲线的名字,名字就类似参数名
可以通过加减来添加或删除曲线信息
即,向Animator添加该动作时,为Animator添加与曲线同名的条件
该条件的数值就会在播放动画时和曲线的数值上的一致
曲线中的值X轴代表标准化时间(0~1)代表动画的开始和结尾
Y轴的值可以根据需求自己设置
也可以使用下方提供的预设曲线
Events 事件
动画事件
类似之前我们学习的Animation窗口中的动画事件
可以在这里为动画剪辑添加一个事件,
当动画播放到事件处时会自动找对象脚本中的同名函数
当我们希望在动画某一时刻进行逻辑处理时非常常用
比如某一时刻进行伤害判断
Mask 遮罩
动画遮罩
主要作用是当播放该动画时
可以指定哪一部分或者哪些骨骼排除在外不受动作影响
Humanoid(人形动画的快捷设置)
我们分别可以控制 头、左右臂、左右手、左右腿、根等
点击他们让他们变成红色,就代表做该动作时不影响该部位
Tran ...