由于本人英文较烂,边翻译用户手册边学习。

用户手册 

IK Components

Final IK 包含许多强大高速的IK组件

Aim 

AimIK solver是一个对CCD算法(cyclic coordinate decent循环坐标下降算法)的修正,通过旋转骨骼的层次结构,确定瞄准目标后子骨骼的Transform。

它不同于内置Animator的 SetLookAtPosition 和 LookAtIK 功能,因为它能对不一致的层级主轴进行精确的目标转换。(because it is able to accurately aim transforms that are not aligned to the main axis of the hierarchy.)

AimIK能重定位角色动画产生非常稳定并且自然的样子,因此它在武器瞄准系统有巨大的潜能。使用AimIK我们能通过偏移单一的向前瞄准姿势或动画来瞄准目标,即使目标几乎在角色身后。它仅仅是对四元数奇点做180度的偏移,solver不知道把脊椎转向哪里。同LookAtIK一样,AimIK提供一个clampWeight属性来避免奇点问题。

AimIK还适用于旋转限制,然而它比其它约束solvers更容易阻塞,链条应该有很强的约束性。

Aim提供了高速高精度,仍须记住把目标的位置与aiming Transform维持在一个安全的范围。如果到traget的距离小于到aiming Transform的距离,solver会尝试卷向自身,可能不会产生预期的结果。

步骤:

· 把AimIK组件添加到角色上

· 把所有的脊椎骨(spine)骨骼节点赋给AimIK组件的Bones (如Bip002 Spine1 Spine2 Spine3 Neck)

· 给Aim Transform赋值 (你想瞄准的目标的Transform)

· 确保Axis代表你想要瞄准的Aim Transform的当前轴 (axis)

· 设置Weight为1,点击Play运行

改变瞄准目标 target

public AimIK aimIK;
void LateUpdate ()
{
aimIK.solver.IKPosition = something;
}

改变Aim Transform  

public AimIK aimIK;
void LateUpdate ()
{
aimIK.solver.transform = something;
aimIK.solver.axis = localAxisOfTheTransformToAimAtTheTarget;
}

在运行时增加AimIK

· 通过脚本添加AimIK组件

· 调用 AimIK.solver.SetChain()

AimIK slover 运行效果

Biped IK

IK系统标准的两足角色旨在复制和增强

[Unity菜鸟] Final IK的更多相关文章

  1. Unity给力插件之Final IK

    Final IK细节: 1.Aim IK:设定一个目标,关节末端始终朝向该目标,一般用来做头部的朝向. 步骤: a.在模型头节点处添加Aim空物体并reset b.给模型添加Aim IK组件,并填上A ...

  2. [Unity菜鸟] 协程Coroutine

    1.协程,即协作式程序,其思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态. unity中StartCoroutine()就是协程,协程实际上是在一个线程中, ...

  3. [Unity菜鸟] Unity Web Player 相关问题 (待完善)

    1. 发布网页版Unity自适应网页大小 发布网页版,Unity3D自适应网页大小.这个问题困扰了我很长时间,今天终于把他解决了,给大家分享一下. 这里用Uinty4.0发布网页版,我去掉了里面的标题 ...

  4. [Unity菜鸟] Unity读XML

    1. 在Unity中调试可行,发布成exe可行,发布成web不行 Application.dataPath 在Unity中调试是在“..Assets”文件夹下, 发布成exe文件是在“..yourNa ...

  5. [Unity菜鸟] 笔记2 —— 问题篇

    记录在学习<Unity 3.x 游戏开发 经典教材>时遇到的各种问题与笔记 1. 初始不能降低Terrain的高度,需要到Terrain设置的第二个按钮中将Height从0调高 (注意:最 ...

  6. [unity菜鸟] 笔记1 —— 函数篇

    SendMessage() 调用其他物体中的指令,先在脚本中编写一个自定义的函数,然后使用SendMessage()命令来调用那个物体上的命令 //①将以下函数附给target对象 void Rena ...

  7. [Unity菜鸟] 摄像头

    1. 连接外置摄像头 2. Unity3D中调用外接摄像头,并保存为图片文件

  8. [Unity菜鸟] 射线

    1. 射线用 Physics.Raycast 都可以判断,用 collider.Raycast 只在某些(不明)情况下可以 void Update() { Ray ray = Camera.main. ...

  9. [Unity菜鸟] Character控制移动

    1. 给角色加角色控制器组件,然后用以下代码可以控制角色移动和跳跃 float speed = 6.0f; float jumpSpeed = 8.0f; float gravity = 20.0f; ...

随机推荐

  1. 浅析IList与List的区别

    List和IList是.net开发中经常遇到的两种类型,用法上经常会让初学者摸不到头脑,下面简要的分析一下这两种类型的区别 1.IList<T>是接口,继承自ICollection< ...

  2. 移植Oracle procedure 到 postgresql

    1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...

  3. C# 生成简单验证码

    网站登录总是会用到验证码,生成验证码对于C#来说很简单.因为有专门封装好的GDI+类可以直接调用使用具体代码如下 using System; using System.Collections.Gene ...

  4. 非阻塞io与记录锁

    非阻塞io 1.对比 阻塞io的例子:scanf从终端获取输入时,如果不输入程序就会一直停在那; 对一个已经有写锁的文件请求读时, 会一直空等直到前面的进程释放锁... 非阻塞的例子:读取文件内容, ...

  5. swap分区添加

    首先你需要使用命令:dd 来创建一个swapfile,然后你需要使用mkswap命令在设备或者文件中创建一个Linux swap分区a) 使用root用户登陆b) 使用下面的命令创建一个2G的 Swa ...

  6. MySQL不同库名相同表结构实现主从配置

    数据库版本 5.6.16 在两个服务器上,存在不同名字的数据库,但是两个数据库中的所有表结构相同,实现主从复制. 主库服务器的数据库名为yoon,从库服务器的库名为hank 在从库的my.cnf配置文 ...

  7. hadoop启动后jps 没有namenode

      hadoop集群启动后,jps 发现没有namenode. 网上查了下,这问题可能是由于两次或两次以上格式化NameNode造成的. 因为我的是刚刚新搭建的集群,里面没什么资料,所以我直接删除各个 ...

  8. usb wifi driver run in ubuntu support 360/xiaodu and with 3.13.0-32-generic

    (为了实现usb-wifi用在linux系统上,需求解决方案,过程记录和如何实现) 重点解决3.13.0-32-generic内核编译 mt7601 usb wifi 驱动问题. 1:首先下载MT76 ...

  9. 关于WP8 微信分享的补充说明

    1.根据微信官方Demo完成相应功能. 2.在分享完后,从微信回来,需要进行 快速恢复. 3.在快速恢复中加入 RootFrame.Navigating += HandlerFotResetNavig ...

  10. java 不可变类型

    1. java不可变性初探 我们先看下面一个例子:代码如下: import java.math.BigInteger; public class BigProblem { public static ...