Unity3D

【Unity3D】IK动画

2023-03-02  本文已影响0人  LittleFatSheep

1 IK简介

2D动画人体模型及动画人物跟随鼠标位置中介绍了 Aniamtion、Animator、人体模型、人体骨骼、人体动画等基础知识及人体动画的应用,本文将进一步介绍 IK 动画。

反向运动学(Inverse kinematics,IK)反映的是一种由手部带到肩部的运动形式,在这个运动中,运动以手部这个自由端为起始,当手部进行运动时会自然的带动固定端肩部的运动。

通常情况下(如:用手端起一个杯子),由肩部带到手部运动,而 IK 是由手部带到肩部运动,所以这种运动学称为反向运动学。IK 的例子有:手触电、被别人牵着走、开枪时手的抖动。

IK 的作用主体是人体,受力来自外部,Unity3D 提供的 IK 端点有首部和足部。

2 IK动画

本节以“瞄准敌人并开枪射击敌人”为例,讲解 IK 动画的使用。瞄准敌人并开枪射击敌人,是一个手部和臂部的动画,使用 Transform 组件可以很容易实现角色朝向敌人,但是较难控制枪口对准敌人,如果直接使用 Transform 组件对枪口位置进行调整,虽然能够对准敌人,但是破坏了动画。使用 IK 动画,能够做到在不破坏动画的前提下使枪口对准敌人。

1)开启 IK Pass

2)脚本组件

using UnityEngine;

public class IKController : MonoBehaviour {
    public Transform target;
    private Animator animator;

    private void Awake() {
        animator = GetComponent<Animator>();
    }

    private void OnAnimatorIK(int layerIndex) {
        // 设置IK权重
        animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
        // 设置IK位置
        animator.SetIKPosition(AvatarIKGoal.RightHand, target.position);
        // 设置眼睛的IK权重
        animator.SetLookAtWeight(1);
        // 设置眼睛的IK位置
        animator.SetLookAtPosition(target.position);
    }
}

说明:脚本组件挂在人物对象上。

声明:本文转自【Unity3D】IK动画

上一篇下一篇

猜你喜欢

热点阅读