Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学
1. 介绍
Avatar Mask(动画融合)
前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题。而动画融合一般用于解决例如边跑边挥手的问题。
简单说就是让跑步去控制腿的骨骼,挥手控制手的骨骼,两个动画融合在一起来播放。
右键新建一个Avatar Mask,Inspector只设置两只手臂的IK。

Layer(动画分层)
在状态机的左侧新建一个Layer层用于控制搬木头

Weight:权重
Mask:骨骼遮罩
Blending:有重写和添加,如果上一层也对手臂有操作操作的话,下一层的添加就无效了
IK Pass:是否使用IK
IK(反向动力学)
IK可以设置5个部位:头、左右手、左右脚
是一种根据骨骼的终节点来推算其他父节点的位置的一种方法。
比如搬木头,就不能让手的位置一直放在一个地方,因为Idle动画时,手也会乱动。这时我们就需要把手一直放在木头上来控制握持位置。
2. 实现
当未用Ik动画,而是只用分层来融合两个动画时,效果是这样的,如果人物不动效果也看不出来什么区别。
但一旦人物运动,就穿模了,可见这样是不行的

使用IK
- 设置好如上图一样
- 把木头放在大概头的位置
- 在人物的子物体手臂位置新建两个空物体命名左右手,并在场景中,先放在大概要搬木头的头的位置
3. 代码
OnAnimatorIK方法是Unity自动调用的,每一层Layer每一帧都会调用,方法名不能改变。
anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position):此方法挺好理解的,就是把手的位置放在某个地方
//unity调用的,哪一层勾选了哪一层每帧都会去调用,layerIndex是哪一层勾选了0-1-2-3
private void OnAnimatorIK(int layerIndex)
{
if(layerIndex == 1)
{
int weight = anim.GetBool(isHoldWood) ? 1 : 0;
//说明当前是被Hold Wood这一层调用的
//把某个骨骼设置在某个位置上,左手,右手
anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position); //设置手的位置
anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHand.rotation); //设置手旋转一样
anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, weight); //设置位置权重
anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, weight); //设置旋转权重
anim.SetIKPosition(AvatarIKGoal.RightHand, rightHand.position);
anim.SetIKRotation(AvatarIKGoal.RightHand, rightHand.rotation);
anim.SetIKPositionWeight(AvatarIKGoal.RightHand, weight);
anim.SetIKRotationWeight(AvatarIKGoal.RightHand, weight);
}
}
//最后在运行游戏的时候微调左右物体的位置和方向,来让手的位置效果最好
使用IK后的效果,可以看到手和木头很好的融合在了一起

Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学的更多相关文章
- Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关
资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBu ...
- Unity3D之Legacy动画系统学习笔记
Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...
- Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...
- Unity3D之Mecanim动画系统学习笔记(五):Animator Controller
简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...
- Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
Mecanim简介 Mecanim动画系统是Unity3D4.0开始引入的一套全新的动画系统,主要提供了下面4个方面的功能: 针对人形角色提供一套特殊的工作流. 动画重定向的能力,可以非常方便的把动画 ...
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...
- Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)
解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...
- Unity3D之Mecanim动画系统学习笔记(四):Animation State
动画的设置 我们先看看Animation Clip的一些设置: Loop time:动画是否循环播放. 下面出现了3个大致一样的选项: Root Transform Rotation:表示为播放动画的 ...
- Unity3D之Mecanim动画系统学习笔记(二):模型导入
我们要在Unity3D中使用上模型和动画,需要经过下面几个阶段的制作,下面以一个人形的模型开发为准来介绍. 模型制作 模型建模(Modelling) 我们的美术在建模时一般会制作一个称为T-Pose( ...
随机推荐
- 微信小程序wxss设置样式
微信小程序wxss设置样式 对于以前搞客户端开发的来说,有着客户端的逻辑,就是不知道怎么设置样式,把对应的控件显示出来 一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视 ...
- Mongo实战之数据空洞的最佳实践
问题背景: 某天,开发部的同事跑过来反映: mongodb数据文件太大,快把磁盘撑爆了!其中某个db占用最大(运营环境这个db的数据量其实很小) 分析: 开发环境有大量测试的增/删/改操作,而由于Mo ...
- Pagination分页
基本语法 下面展示Paginator的基本使用 >>> from django.core.paginator import Paginator >>> object ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 3—多分类逻辑回归和神经网络
作业说明 Exercise 3,Week 4,使用Octave实现图片中手写数字 0-9 的识别,采用两种方式(1)多分类逻辑回归(2)多分类神经网络.对比结果. (1)多分类逻辑回归:实现 lrCo ...
- SecureCRT中某些命令提示符下按Backspace显示^H的解决方法
SecureCRT中某些命令提示符下按Backspace显示^H的解决方法 安装了Apache Derby数据库服务器之后,使用ij客户端去连接derby服务端,可是在ij中输入命令的时候,每当输入错 ...
- HDR
[HDR] 什么是 HDR? 高动态范围拍摄(HDR)现在已经得到广泛使用,被用来补偿大多数数码成像传感器有限的动态范围.照片的动态范围是指最暗的色彩与最亮的色彩之间的亮度范围——也可以一并表示色调范 ...
- mysql外键约束总结
总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是 ...
- ajax load事件
ajax.load 使用ajax 来改变div元素文本. load( url [, data][, callback] ) load()方法的传递方式根据参数data来自动指定.如果没有参数传递,则 ...
- SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册
1 Eureka知识点 按照功能划分: Eureka由Eureka服务端和Eureka客户端组成 按照角色划分: Eureka由Eureka Server.Service Provider.Servi ...
- OpenCV 2.4.13 installed in Ubuntu 14 and CMakeLists Demo
1. 配置编译器环境 [compiler] sudo apt-get install build-essential 2. 安装OpenCV的依赖包 [required] -dev pkg-confi ...