AvatarMask(骨骼遮罩)

在前面角色动画的基础上,角色在奔跑过程中捡起一块木头,双手要抱着这块木头。如果使用前面的方法,直接切换动画,那么就只剩下抱木头的动画,其它动画就没了。这时我们要使用下面的方法。

在这里创建新的一层,在这个新的层上控制抱木头的动画。

这里层属性设置中,Weight表示占有权重,Mask表示骨骼遮罩,Blending表示混合类型(Override表示重写,Additive表示在此基础上添加)。其中,Additive适用于,每个层控制不同部位的动画。当混合类型为Override且权重为1时,角色的所有动画都将是本层的。

在上面的例子中,我们需要用这一层来控制角色抱木头的动画,用到的只有双手,而其它动画和原先一样。所以,我们需要在本层的Mask中添加一个骨骼遮罩。直接右键--Avator Mask可以创建

创建好后,在Humanoid中,点击各个部位,变红表示重写时不重写这部分,还是用以前的动画。这里双手是绿色的,表示在抱着木头后,双手的动画由本层控制,其它部位的动画还是和以前一样。

IK动画

在上面,我们虽然设置好了角色抱木头的动画,但是可能角色和木头之间位置是不匹配的,我们需要把角色的双手设置到木头上的两个位置点。这个时候就需要用到IK动画了。首先要打开IK Pass,会自动执行函数OnAnimatorIK,在这个函数中我们设置角色的手和位置点匹配。

    private void OnAnimatorIK(int layerIndex)
{
// 说明当前是被Hold Log这一层调用
if (layerIndex == 1)
{
// 权重,只有在抱着木头的时候才为1
int weight = anim.GetBool(isHoldLogID) ? 1 : 0; // 左手位置匹配
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);
}
}

Unity中的动画系统和Timeline(4) AvatarMask和IK动画的更多相关文章

  1. Unity中的动画系统和Timeline(3) 混合树和动画匹配

    混合树 前面我们通过在Animation界面添加单独的动作来控制动画,这样做比较麻烦,每个单独的属性,比如站立,奔跑等,都需要单独的代码来控制.现在我们可以通过使用混合树,其基本思想是将相近的动画混合 ...

  2. Unity中的动画系统和Timeline(1) 普通动画创建

    学习使用版本:Unity2017.1.1 目标:给一个Cube创建动画 一:第一种创建方法 1 Windows —— Animation,打开Aniamtion动画界面,此时显示 因为此时没有任何动画 ...

  3. Unity中的动画系统和Timeline(3) 模型和动画导入

    动画导入 美工做好的模型,直接将文件夹拖进来就导入好了.导入模型后,检查模型的材质贴图等是否丢失,若丢失,根据名字补上.如果美工取名规范,一一对应的话,就很简单.如果不是,那就呵呵哒. 有的美工做的比 ...

  4. Unity中的动画系统和Timeline(5) Timeline

    在前面的动画,都是控制单独的物体,比如说控制一个角色的运动.而Timeline,可以对多个物体实施动画,形成过场动画,或者电影效果.比如,很多赛车游戏比赛开始前都会播放一段开场动画,围绕自己车的几个方 ...

  5. Unity中的动画系统和Timeline(2) 按钮动画和2D精灵动画

    按钮动画 1 创建按钮后,按钮的Button组件中,Transition我们平时用的时Tint,这次选择Animation 选择Auto Generate Animation,创建一个按钮动画 2 后 ...

  6. 高速上手Unity中最好的补间动画插件DFTween

     出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.17   23:00 DFTween 是一个在 Unity 游戏引擎中高 ...

  7. 骨骼动画的原理及在Unity中的使用

    制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...

  8. 如何在unity中使用龙骨动画

    龙骨 龙骨是Egret公司的一个用来做动画的软件,本文分享一下如何在Unity2D中使用龙骨导出的2D动画 导出动画 在龙骨中文件->导出,导出动画数据和纹理到Unity的项目中,如果打包了的话 ...

  9. 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...

随机推荐

  1. python中list.sort()与sorted()的区别

    list.sort()和sorted()都是python的内置函数,他们都用来对序列进行排序,区别在于 list.sort()是对列表就地(in-place)排序,返回None:sorted()返回排 ...

  2. JAVA笔记6-继承和权限控制

    1. (1)类的成员的权限修饰符有public,protected,private或default,限定其他对象对该类对象成员的访问权限. (2)class的权限修饰符只可以是public或defau ...

  3. 1,Java消息服务-JMS

    一,消息服务 消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持应用程序开发.在Java中,当两个应用程序使用JMS ...

  4. Jquery实现div左右重复来回走动

    <!DOCTYPE HTML><html><head> <meta charset=utf-8 /> <title>UFO来了</ti ...

  5. Linux命令-文件管理(一)

    Linux命令-文件管理(一) 1.命令:cat cat命令用于把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 使用权限:所有使用者 语法格式:cat [-AbeEn ...

  6. xwiki使用中的问题

    xwiki 内存限制 问题重现: xwiki启动后内存.cpu一直上涨,不回落,启动后服务访问速度越来越慢,最后无法访问 分析: xwiki在启动时会消耗大量内存和cpu,增加tomcat最大内存限制 ...

  7. Fastdfs 单机安装 教程

    分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群 详细的最新版fastdfs单机版搭建 分布式文件系统 - FastDFS 在64位CentOS 下配置安装部署

  8. ubuntu E: Could not get lock /var/lib/apt/lists/lock 异常信息

    转载:https://www.cnblogs.com/qq952693358/p/6537846.html 在更换软件源时遇到了如下问题: sudo apt-get update E: Could n ...

  9. PyCharm将main.py解析成text文件的解决方法

    问题:PyCharm将main.py解释成文本文件,没有代码提示,也无法执行 解决方法:File->Settings->Editor->File Types ->选则Text ...

  10. 分布式-信息方式-ActiveMQ的集群

    ActiveMQ的集群Queue consumer clusters              ActiveMQ支持 Consumer对消息高可靠性的负载平衡消费,如果一个 Consumer死掉,该消 ...