zoukankan      html  css  js  c++  java
  • Unity3d Final IK 插件的使用

    本篇简单介绍Unity3d 插件 Final IK的使用

    Final IK简介

    Final IK是一个反向动力控制插件。(unity版本为5.1及以上版本)

    反向动力控制:通俗的将就是通过子骨骼,推导出其所在骨骼链上n级父骨骼位置,从而确定整条骨骼链的方法。所以你只需要控制子骨骼进行运动操作。

    Final IKIK类型

    Final IK为我们提供了很多IK类型供选择,主要的IK类型。

    • Aim IK:是CCD算法的改进版本。可以设置一个目标,使关节末端始终瞄准该目标,可以用于武器的瞄准。它可以消除单一的向前瞄准,甚至可以瞄准角色的背后

    • Biped IK:它可以自动检测两足动物的骨骼,而且包括一个头部IK控制。可以使人物的姿势更加的自然。

    • CCD IK:将每个关节和末端对齐,使得最后一个骨骼迭代更接近末端。可以用来制作尾巴、机械臂(工业机器人)。

    • FABR IK:类似于CCD IK,但是相较来说每个关节不需要和末端对齐。所以更加的自由。可以用来制作绳索。

    • Limb IK:主要是用于3段手和腿或是其他肢体类型。

    • Look At IK:主要用于旋转一系列骨骼面向目标物体。

    Final IK的使用

    手动添加CCD IK

    以CCD IK为例

    • 首先我们在3Dmax创建一个简单的机械臂。

    outPut

    • 我们给Axis1添加一个CCDIK 你可以在插件的 RootMotion --> FinalIK --> IK Components 位置找到。然后依次添加三个Bones

    outPut

    ps: 你也可以通过添加不同的限制属性来限制每个轴的运动。

    outPut

    如图我们给Axis2添加了一个角度限制,限制它只能在荧光区域进行旋转。

    outPut

    • 最后我们创建一个脚本来控制IK。
    
    using UnityEngine;
    using System.Collections;
    using RootMotion.FinalIK;
    
    public class CCD : MonoBehaviour {
    
    	CCDIK ccdIK;
    
        // 获取ccdIK 
    	void Start () {
    		ccdIK = GetComponent<CCDIK> ();
    	}
    	
    	// 设置ccdIK解算器的x 坐标为 -10
    	void LateUpdate () {
    		ccdIK.solver.IKPosition.x = -10;
    	}
    }
    
    
    

    绑定并运行,我们发现棍子可耻的弯了。

    outPut

    上面的那个就是IK解算器

    运行时添加CCD IK

    • 我们创建一个脚本

    然后绑定到我们的棍子上,然后运行它又弯了。

    
    using UnityEngine;
    using System.Collections;
    using RootMotion.FinalIK;
    
    public class CCD2 : MonoBehaviour {
    
    	Transform obj1;
    	Transform obj2;
    	CCDIK ccdIK;
    
    	void Start () {
    	
    	    //给绑定的物体添加一个`CCDIK`
    		gameObject.AddComponent<CCDIK>();
    
            //获取要添加的其他两个`bones`
    	    obj1 = GameObject.Find ("Axis_2_2").transform;
    		obj2 = GameObject.Find ("Axis_2_2/Axis_2_3").transform;
    		
    		Transform[] tran = new Transform[] {gameObject.transform, obj1, obj2 };
    	
    		ccdIK = gameObject.GetComponent<CCDIK> ();
    		
    		// 使用`ccdIK.solver.SetChain()`绑定骨骼
    		ccdIK.solver.SetChain (tran,gameObject.transform);
    	}
    
    	void Update () {
    		ccdIK.solver.IKPosition.x = -2;
    	}
    }
    
    
    

    outPut

  • 相关阅读:
    EC2自定义监控推到cloudwatch
    使用pgcli工具连接postgreSQL数据库服务
    使用go-retryablehttp包实现http“链接池”效果
    xorm相关操作小结
    使用Go处理HTTP压缩文件数据总结
    使用unpackit包解压gz包遇到的一个问题与解决方案
    使用Golang解压缩文件遇到的问题及解决方法
    Golang函数或方法传递nil值的一个坑
    使用golang实现一个LRU进程缓存模块
    mysql配置文件my.cnf配置了绑定ip报错Communications link failure解决方法
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9661378.html
Copyright © 2011-2022 走看看