序言: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. android OTA升级包制作

    0.签名 java -Xmx2048m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/t ...

  2. php模板引擎smarty

    一. smarty的特点 速度:相对于其他模板引擎,速度较快 编译型:在下次访问模板时直接访问编译文件,不再进行模板重新编译 缓存技术:可以将用户最终看到的HTML文件缓存成一个静态HTML 插件技术 ...

  3. ES6学习笔记(三)—— Set 和 Map

    SetES6提供的数据结构,类似于数组,但是成员的值都是唯一的.(提供了一种数组去重的方法) Set 内部判断两个值是否相同使用的是 'Same-value equality',类似于 ===但是 N ...

  4. Substrings(hdu 4455)

    题意: 给定一个序列ai,个数为n.再给出一系列w:对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数. /* dp[i]表示长度为i的序列不同元素个数之和. 考虑从 ...

  5. compositionstart 、 compositionend 、 input都存在时的解决办法

    $(function () { var cpLock = true; $('#textbox').off().on({ compositionstart: function () {//中文输入开始 ...

  6. elastaticsearch

    # https://elasticsearch-dsl.readthedocs.io/en/latest/ # 文档:https://es.xiaoleilu.com/054_Query_DSL/70 ...

  7. Invalidation queue with "bit-sliceability"

    BACKGROUND, FEATURES In a computer system having more than one memory storage facility, a special da ...

  8. appium===Python+Appium环境部署教程

    *前提是你已经安装好python,以及python的pip工具 *安装python请自行百度教程~ 1.安装安卓sdk 安装包:http://tools.android-studio.org/inde ...

  9. appium===安卓SDK下载很慢的解决办法

    方法一:http://www.apkbus.com/forum.php?mod=viewthread&tid=240851 方法二:http://www.androiddevtools.cn/

  10. Linux下查看使用的是哪种shell的方法汇总【转】

    转自:http://www.jb51.net/LINUXjishu/247797.html 查看当前发行版可以使用的shell 复制代码 代码如下: [root@localhost ~]$ cat / ...