【Unity3D】IK动画

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);
	}
}

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

猜你喜欢

转载自blog.csdn.net/m0_37602827/article/details/126444764