• AnimatorController反向运动学IK


    通过使用反向运动学IK,我们可以根据需要控制角色身体某个特定部位进行旋转或移动,达到想要的一些效果,比如:在移动时,让一只脚带伤拖行;让手抬起去拿桌上的苹果;让脑袋一直面向我们的色像机,就像一直注视着我们 等等。

    先来个模拟受伤的脚吧:
    在此之前,请将角色的动画状态机中,应用IK的层勾选IKPass属性:
    QQ截图20151007205858
    然后,在人物对象下,建立一个空的子物体IKTarget,放在右脚踝靠后的地方。
    最后后在人物上添加脚本IKController:

     1 using UnityEngine;
     2 using System.Collections;
     3  
     4 public class IKController : MonoBehaviour 
     5 {
     6     public Transform target;  //IK目标
     7     public bool ikActive;     //IK是否可用
     8     private Animator anim;
     9  
    10     void Awake()
    11     {
    12         anim = GetComponent <Animator> ();
    13     }
    14  
    15     //IK控制要在OnAnimatorIK方法中写!
    16     void OnAnimatorIK()
    17     {
    18         if (ikActive)
    19         {
    20             //指定要控制的身体部位的IK权重,1为启用,0为不启用。
    21             anim.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1);
    22             anim.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
    23  
    24             //设置IK的目标值
    25             anim.SetIKPosition(AvatarIKGoal.RightFoot, target.position);
    26             anim.SetIKRotation(AvatarIKGoal.RightFoot, target.rotation);
    27         }
    28     }
    29 }

    将target设置为我们的刚才建立的空物体IKTarget,运行游戏,让角色移动动画播放起来,可以看到右脚的动画没有播放,而是拖着走的咯。我们可以在scene视图中改变IKTarget的位置和旋转,主角的右脚也会跟着移动,当然这也可以用代码进行控制。

    再来个控制人物一直注视色像头的:
    将色像机放在角色前面,并在上面脚本添加一点代码:

    1 anim.SetLookAtWeight(1);
    2 //眼睛看这里              
    3 anim.SetLookAtPosition(GameObject.FindWithTag("MainCamera").transform.position);

    OK,运行游戏,移动色像机,别这样一直看着人家啊,会害羞的^^!
    QQ截图20151007210633

  • 相关阅读:
    Auto.js实现自动刷视频,点赞脚本(一)
    C# 将excel文件导入到SqlServer数据库
    JavaScript实现HTML导航栏下拉菜单[悬浮显示]
    补码的知识
    指针06 零基础入门学习C语言46
    指针05 零基础入门学习C语言45
    标志寄存器01 零基础入门学习汇编语言54
    标志寄存器02 零基础入门学习汇编语言55
    标志寄存器02 零基础入门学习汇编语言55
    标志寄存器01 零基础入门学习汇编语言54
  • 原文地址:https://www.cnblogs.com/zhenlong/p/4870990.html
Copyright © 2020-2023  润新知