序言:IK动画全名是Inverse Kinematics 意思是逆向动力学,就是子骨骼节点带动父骨骼节点运动。

一、适用范围:

在Mecanim系统中,任何正确设置了Avatar的人形动画都支持IK功能。

二、常用函数:

1、SetIKPositionWeight

2、SetIKRotationWeight

3、SetIKPosition

4、SetIkRotation

5、SetLookAtPosition

6、bodyPosition

7、bodyRotation

如下就用了Ik功能,可以根据移动方块来控制手臂的移动:

                    

三、IK功能的打开:

选中一个动画模型,其必须完成了正确的骨骼映射,具体的骨骼映射步骤可以参考上一篇,

为其创建动画状态机,这里需要注意,在动画层窗口中选中IK Pass选项,一定要选择,否则无法正确使用IK功能。

                    

四、代码的控制:

这里我们就可以通过以下代码进行控制角色的右手臂被方块控制移动了。

 using UnityEngine;
using System;
using System.Collections; [RequireComponent(typeof(Animator))] public class IK : MonoBehaviour
{ protected Animator animator; //动画控制
public bool ikActive = false; //是否开始IK动画
public Transform rightHand = null; //右手子节点参考的目标 void Start()
{ animator = GetComponent<Animator>(); //得到动画控制对象
}
//它是回调访法,必须勾选IK Pass!!!
void OnAnimatorIK()
{
if (animator)
{ //即或IK动画后开始让右手节点寻找参考目标。
if (ikActive)
{ //设置骨骼的权重,1表示完整的骨骼,如果是0.5,哪么骨骼权重就是一半,可移动或旋转的就是一半
animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1f); //set the position and the rotation of the right hand where the external object is
if (rightHandObj != null)
{
//设置右手根据目标点而旋转移动父骨骼节点
animator.SetIKPosition(AvatarIKGoal.RightHand, rightHand.position);
animator.SetIKRotation(AvatarIKGoal.RightHand, rightHand.rotation);
} } //如果取消IK动画,哪么重置骨骼的坐标。
else
{
animator.SetIKPositionWeight(AvatarIKGoal.RightHand, );
animator.SetIKRotationWeight(AvatarIKGoal.RightHand, );
}
}
}
}

五、总结:

我这里只练习了右手臂的,IK定义可以控制两只手和两只脚的移动,所以大家可以去尝试尝试。

                                                                                            2017-12-17、11:31:43

02、Mecanim之IK动画的更多相关文章

  1. Mecanim之IK动画

    序言:IK动画全名是Inverse Kinematics 意思是逆向动力学,就是子骨骼节点带动父骨骼节点运动. 比如体操运动员,只靠手来带动身体各个部位的移动.手就是子骨骼,身体就是它的父骨骼,这时运 ...

  2. Unity3D学习笔记(十七):IK动画、粒子系统和塔防

    新动画系统: 反向动力学动画(IK功能): 魔兽世界(头部动画),神秘海域(手部动画),人类一败涂地(手部动画) 如何启用(调整) 1.必须是新动画系统Animator 设置头.手.肘的目标点 2.动 ...

  3. Unity中的动画系统和Timeline(4) AvatarMask和IK动画

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

  4. Unity3d之Mecanim(新版动画系统)

    1,动画系统配置,2,代码控制动画 原文地址:http://blog.csdn.net/dingkun520wy/article/details/51247491 1,动画系统配置 创建Animato ...

  5. Unity (反向动力学)IK动画

  6. Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画

    什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...

  7. 01、Mecanim动画系统

    序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...

  8. Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)

    解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...

  9. Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

    简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...

随机推荐

  1. [Leetcode] Remove duplicates from sorted list 从已排序的链表中删除重复元素

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  2. [Leetcode] palindrome partition ii 回文分区

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  3. JS格式化时间(支持小程序,兼容IOS)

    })-(\d{})-(\d{})T(\d{}):(\d{}):(\d{})/ /** * @function format time * @param val, format * @return {s ...

  4. MySQL使用笔记(四)数据的操作

    By francis_hao    Dec 14,2016 数据的操作包括插入数据记录.更新数据记录和删除数据记录. 插入数据记录 插入单条数据记录 field表示的字段名和value表示数据要一一对 ...

  5. n元线性方程非负整数解的个数问题

    设方程x1+x2+x3+...+xn = m(m是常数) 这个方程的非负整数解的个数有(m+n-1)!/((n-1)!m!),也就是C(n+m-1,m). 具体解释就是m个1和n-1个0做重集的全排列 ...

  6. Unable to start activity ComponentInfo{com.example.administrator.myapplication/com.example.administrator.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #0: Binary XM

    本来就是把fragment写死在activity的xml模板里面,结果报了这个错误, Unable to start activity ComponentInfo{com.example.admini ...

  7. PropertiesConfiguration的用法

    PropertiesConfiguration是一个配置文件的加载工具类,封装了从配置文件里获取值并转化为基本数据类型的方法. 使用org.apache.commons.configuration2中 ...

  8. Spring securiuty 过滤器

    1. HttpSessionContextIntegrationFilter 位于过滤器顶端,第一个起作用的过滤器. 用途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个Sec ...

  9. 【BZOJ】1770 [Usaco2009 Nov]lights 燈

    [算法]高斯消元-异或方程组 [题解]良心简中题意 首先开关顺序没有意义. 然后就是每个点选或不选使得最后得到全部灯开启. 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的. 异或中1可以完美 ...

  10. ACdream 1113 The Arrow (概率dp求期望)

    E - The Arrow Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit  ...