【Unity3D】IK动画
1.【Unity3D】Unity3D技术栈2.【Unity3D】常用快捷键3.【Unity3D】地形Terrain4.【Unity3D】MonoBehaviour的生命周期5.【Unity3D】Transform组件6.【Unity3D】刚体组件Rigidbody7.【Unity3D】人机交互Input8.【Unity3D】碰撞体组件Collider9.【Unity3D】发射(Raycast)物理射线(Ray)10.【Unity3D】GUI控件11.【Unity3D】相机跟随12.【Unity3D】UGUI概述13.【Unity3D】UGUI之Text14.【Unity3D】UGUI之Button15.【Unity3D】UGUI之Image和RawImage16.【Unity3D】UGUI之Dropdown17.【Unity3D】UGUI之Toggle18.【Unity3D】UGUI之Slider19.【Unity3D】UGUI之布局组件20.【Unity3D】UGUI之InputField21.【Unity3D】摇杆22.【Unity3D】UGUI回调函数23.【Unity3D】血条(HP)24.【Unity3D】角色控制器(CharacterController)25.【Unity3D】Tank大战26.【Unity3D】相机27.【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏28.【Unity3D】2D动画29.【Unity3D】人体模型及动画30.【Unity3D】人物跟随鼠标位置31.【Unity3D】AudioSource组件32.【Unity3D】动画回调函数、动画事件、动画曲线33.【Unity3D】动画混合
34.【Unity3D】IK动画
35.【Unity3D】灯光组件Light36.【Unity3D】导航系统37.【Unity3D】动态路障导航38.【Unity3D】分离路面导航39.【Unity3D】拖尾TrailRenderer40.【Unity3D】线段渲染器LineRenderer41.【Unity3D】粒子系统ParticleSystem42.【Unity3D】基于粒子系统实现烟花特效43.【Unity3D】VideoPlayer组件44.【Unity3D】协同程序45.【Unity3D】同步Socket通讯46.【Unity3D】异步Socket通讯47.【Unity3D】Photon环境搭建48.【Unity3D】缩放、平移、旋转场景49.【Unity3D】绘制物体表面三角形网格50.【Unity3D】使用GL绘制线段51.【Unity3D】点选物体、框选物体、绘制外边框52.【Unity3D】绘制物体外框线条盒子53.【Unity3D】基于AssetBundle实现资源热更新54.【Unity3D】魔方55.【Unity3D】立方体纹理(Cubemap)和天空盒子(Skybox)56.【Unity3D】Cesium加载大地图57.【Unity3D】UI Toolkit简介58.【Unity3D】UI Toolkit容器59.【Unity3D】UI Toolkit元素60.【Unity3D】UI Toolkit样式选择器61.【Unity3D】UI Toolkit自定义元素62.【Unity3D】UI Toolkit数据动态绑定63.【Unity3D】资源管理64.【Unity3D】Unity与Android交互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动画
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 我与微信审核的“相爱相杀”看个人小程序副业