Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画

Unity给力插件之Final IK Final IK细节: 1.Aim IK:设定一个目标,关节末端始终朝向该目标,一般用来做头部的朝向。 步骤: a、在模型头节点处添加Aim空物体并reset b、给模型添加Aim IK组件,并填上Aim Transform及根脊椎到头的4节关节(可以设置权重) c、创建目标target(空物体)于脸的正前方, d、在模型上添加空物体Pin,位置与target一致 e、给target... 阅读详情

什么是IK?

IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学),而IK则倒过来,由骨骼子节点带动骨骼父节点,具体情况比如人物走路踩到了石头就需要由脚的子节点来带动全身骨骼做出踩到石头的响应。

IK可以使人物和场景更加贴合,从而达到更加真实的游戏效果,如果大家玩过《波斯王子》或《刺客信条》系列,应该对主角的攀爬和飞檐走壁的能力印象深刻,这些都是应用了IK,使动画贴合到具体的场景中进行的表现。

Unity3D本身已经带有了IK的功能(http://docs.unity3d.com/Manual/InverseKinematics.html),我们接下来就对IK进行一下简单的学习和使用。

FinalIK

该插件是对Unity本身的IK的优化和增强,可以模拟出更加真实的效果,有兴趣可以看一看。

https://www.assetstore.unity3d.com/cn/#!/content/14290

实例

我们直接上手一个小例子来看看Unity3D中的IK应该如何使用,我们会创建一个场景,使人物的头部始终面向一个点,同时创建四个点控制人物的手和腿的移动。

我们在场景中添加一个人物和5个小球,如下:


根据Unity官方的文档给出的资料来看,首先必须在需要使用IK动画的Animator的层上开启“IK Pass”,如下图所示:


只有开启了这个选项,系统才会调用IK相应的方法。

下面我们为这个人物添加一个脚本,如下:

using UnityEngine;
using System.Collections;

public class TestIK : MonoBehaviour
{
    public Transform lookAtTarget;

    public Transform leftHandTarget;
    public Transform rightHandTarget;
    public Transform leftFootTarget;
    public Transform rightFootTarget;

    private Animator _animator;

    void Start()
    {
        _animator = this.GetComponent<Animator>();
    }
    
    void OnAnimatorIK(int layerIndex)
    {
        if(_animator != null)
        {
            //仅仅是头部跟着变动
            _animator.SetLookAtWeight(1);
            //身体也会跟着转, 弧度变动更大
            //_animator.SetLookAtWeight(1, 1, 1, 1);
            if(lookAtTarget != null)
            {
                _animator.SetLookAtPosition(lookAtTarget.position);
            }

            _animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
            _animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
            if(leftHandTarget != null)
            {
                _animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandTarget.position);
                _animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandTarget.rotation);
            }

            _animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
            _animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
            if(leftHandTarget != null)
            {
                _animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandTarget.position);
                _animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandTarget.rotation);
            }
            
            _animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1);
            _animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1);
            if(leftHandTarget != null)
            {
                _animator.SetIKPosition(AvatarIKGoal.LeftFoot, leftFootTarget.position);
                _animator.SetIKRotation(AvatarIKGoal.LeftFoot, leftFootTarget.rotation);
            }
            
            _animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1);
            _animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
            if(leftHandTarget != null)
            {
                _animator.SetIKPosition(AvatarIKGoal.RightFoot, rightFootTarget.position);
                _animator.SetIKRotation(AvatarIKGoal.RightFoot, rightFootTarget.rotation);
            }
        }
    }
}


需要注意的是,控制IK的脚本必须添加到OnAnimatorIK方法中才会生效,下面看下效果图:


天道酬勤,功不唐捐!

原文地址:http://www.cnblogs.com/hammerc/p/4829943.html


Unity角色动画脚部IK五步实战:解决踩踏问题与环境适配 在游戏开发与计算机动画领域,反向动力学(IK)是一种通过设定末端效应器目标位置,反向计算关节链旋转的核心技术。其原理在于解决预录制动画与动态环境间的适配矛盾,通过数学求解实现骨骼姿态的实时校正。这项技术的核心价值在于显著提升角色与环境的交互真实感,是3D角色动画中实现精准定位、消除穿模的关键手段。其典型应用场景包括角色行走在斜坡、台阶等不规则地形时的脚部姿态调整,以及手部抓取物体的精确对位。本文聚焦于Unity引擎中脚部IK的实现,通过目标探测、骨盆补偿等五步实战法,系统讲解了如何利用射线检测与Animat 阅读详情

相关推荐

Unity基础-Mecanim动画系统

##Unity3D 动画系统分类 1.Unity3D 3.5版本之前是旧的系统Legacy系统 2.Unity3D 4.0版本新增加Mecanim动画系统 ##Mecanim新动画系统 Mecanim优点 针对人形角色提供了一种特殊的工作流,包含Avatar的创建和对肌肉的调节。 动画重定向的能力,可以非常方便地把动画从一个角色模型应用到其他角色模型上。 提供了可视化Ani...

TxNet 1250

unity新动画系统之IK动画

国际惯例,先来一段说明。IK动画全称Inverse Kinematics,即反向动力学,牵一发而动全身的既视感。 代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class IK_test : MonoBehaviour {     Animator _an...

wf2537的博客 1402

Unity3D格斗游戏动画系统实战Demo

Unity3D的动画系统历经从到Mecanim的重大演进。Legacy系统采用简单的方式播放剪辑,适合轻量级项目,但缺乏状态管理与复用机制;而Mecanim引入了基于Avatar骨骼映射的统一角色模型标准,支持动画重定向(Retargeting),使同一套动画可在不同人形角色间无缝复用。// Legacy系统典型调用(已过时)// Mecanim系统通过Animator组件控制Mecanim的核心优势在于其参数驱动的状态机系统。

weixin_35732273的博客 1493

unity之Mecanim动画系统学习(5):IK

unity之Mecanim动画系统学习(5) 今天来学一学IK。 IK 什么是IK?IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学),而IK则倒过来,由骨骼子节点带动骨骼父节点,就比方说,人物走路是父节点带动子节点,但是在你走路的时候,突然扭了一下,你的身体有点失...

weixin_44168889的博客 459

Unity3D深渊领主布鲁塔卢斯动画模型实战资源

在Configure界面中,“Bone Mapping”表格是构建Generic Avatar的核心工具。该表格左侧列为Unity期望的逻辑骨骼名称(如RightHand),右侧为可供选择的实际骨骼下拉框。填写该映射表时应遵循以下规范:映射原则具体做法优先选择末端控制骨如手部应选手腕而非手指末梢保持层级连续性上臂→前臂→手的父子链不能中断忽略装饰性骨骼如翅膀羽毛细节、披风挂件等不影响主体运动的可留空多部件合并处理。

weixin_28922227的博客 810

Hybrid IK 混合IK 逆运动学解算器

Hybrid IK 是一款快速、强大、平滑的 Unity 逆插补运动学解决方案,支持关节极限!它是一种混合系统,在一种新的算法中结合了 FABRIK 和 CCD 技术的优点,可在关节极限约束下沿大范围运动实现平滑插值。混合 IK 还提供使用关键帧姿势对 IK 空间进行参数化的可选功能,该功能可用于进一步指导 IK 解决方案如何以快速简单的方式向其目标进行插值。此功能加上对拉伸极限的支持,以及设置严格遵循关节限制同时沿大运动范围平滑插补的 IK 层次结构的快速简单方法,使 Hybrid IK 脱颖而出。设置快速简便,无需编写脚本。

Unity3D游戏开发之Unity3D动画与Mecanim动画系统

Unity3D动画与Mecanim动画系统 Mecanim是Unity新增的动画系统,其功能强大而灵活,让人类和非人类角色栩栩如生。Mecanim的重定向极大的提供了工作效率,而且占用极少CPU周期。使用从Unity资源商店找到的动画资源,或把您自己的动画文件(动作捕捉或关键帧)导入编辑器,启动或实现整个项目,并将它们转换为您自己的可重定向的动画资源。 轻松地构建和编辑复杂的状态机和混

1277

HybridIK(非常容易控制).zip

一个快速,稳健,平滑插值逆运动学解统一,支持关节限制!一个混合系统,结合了FABRIK和CCD技术的优点,实现了受关节限制的大范围运动的平滑插值。 内部有机械手案例,开箱即用

Unity3D脚部IK实战:5步搞定角色动画自然踩踏(附完整代码解析)

本文详细解析了在Unity3D中实现角色脚部IK(反向动力学)以解决动画踩踏问题的完整实战流程。通过5个核心步骤:目标探测、目标求解、骨盆补偿、权重混合与姿态应用,并附上完整代码,帮助开发者让角色脚部自然贴合斜坡、楼梯等复杂地形,显著提升动画沉浸感。

w3x4y的博客 316

告别里程焦虑:手把手教你用MATLAB/Simulink仿真电动车AMT换挡规律(附代码)

本文详细介绍了如何使用MATLAB/Simulink仿真电动车AMT换挡规律,帮助解决里程焦虑问题。通过搭建完整的仿真系统,包括电机MAP图处理、Stateflow逻辑实现和动力性与经济性换挡曲线生成,优化电动车换挡策略以提升续航与性能。附带的代码示例和实用技巧使开发者能够快速上手并验证仿真结果。

weixin_26757925的博客 306

LinuxCNC 源码解析:从界面开发到硬件交互的实战指南

本文深入解析LinuxCNC源码架构,从用户界面开发到硬件交互的实战指南。涵盖GTK与Tkinter界面开发、HAL硬件抽象层、G代码解析器改造及运动控制核心等关键模块,提供定制化开发技巧与性能优化方案,助力开发者高效掌握数控系统开发。

weixin_27066963的博客 190

动画系统Mecanim

导入模型 正在上传…重新上传取消导入资源之后,找到模型进行相关的设置:1、Rig● Animation Type:Legacy:适于旧版的动画模型;Generic:适于新版的动画模型;Humanoid:适于人物模型;● Avatar Definition:(获取Avatar的方式)Create From This Model:从模型中创建;Copy From Other Avatar:从其他Avatar中复制;2、ModelScale Factor:模型大小9.2 Mecanim的简单应用1

weixin_64791172的博客 434

如何利用CN3791实现太阳能电池板对锂电池的高效充电管理

本文详细介绍了如何利用CN3791芯片实现太阳能电池板对锂电池的高效充电管理。CN3791集成了MPPT(最大功率点跟踪)功能,能智能调节太阳能板的输出,确保在不同光照条件下获得最大功率。文章涵盖芯片工作原理、外围电路设计、充电全过程管理及实际应用经验,帮助开发者优化太阳能充电系统效率。

weixin_33709219的博客 499

反向动力学在计算机动画中的应用,Unity高级开发(五)-Mecanim动画系统-反向动力学...

方反向运动学反向动力学:IK1:什么是反向动力学?一般我们都是通过父节点来调动子节点运动,而在实际开发过程中,有时候我们需要子节点带动父节点进行相应的动作。这种情况就是反向动力学。其实在国内的游戏中很少看见IK动画,一般而言国外的游戏较多。例如刺客信条,手部带动身体的爬行。通俗讲:使用场景中的各种物体来控制和影响角色身体部位的运动2:IK能做什么?一般来说,我们在特定的场景下,需要我们的游戏对象一...

weixin_33739387的博客 323

ANSYS Sherlock新手避坑:从ODB++文件导入到属性匹配的完整流程(附官方教程路径)

本文详细解析了ANSYS Sherlock从ODB++文件导入到属性匹配的完整流程,帮助新手避开常见陷阱。内容包括环境准备、官方教程使用技巧、ODB++导入关键检查点、属性验证策略及常见报错解决方案,特别强调了路径设置和材料匹配的重要性,提升仿真效率。

weixin_42519781的博客 455

从零搭建AMESim与Matlab/Simulink联合仿真环境(2024版软件配置详解)

本文详细介绍了2024年最新版AMESim与Matlab/Simulink联合仿真环境的搭建与配置方法。从软件安装顺序、路径设置到编译器配置,逐步指导如何实现高效联合仿真,特别强调了版本兼容性和环境变量设置等关键细节,帮助工程师快速解决常见问题并优化仿真性能。

weixin_42538752的博客 735

Mecanim动画系统

关于动画模型的处理 一般动画系统的制作与使用流程 建模注意事项: 模型导出 Animator(动画编辑器) Add Behaviour 的简单应用: Animator Controller(动画控制器) HasExitTime Unity的动画系统由以下几部分组成:Animator(动画编辑器)、Animator Controller(动画控制器)、Animation(动...

写作帮助思考 843

1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目

本文介绍如何在 SAP ABAP 事物码 SEGW 里创建 SEGW 项目,使用工具生成 Runtime 运行时需要的资源。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5442
上一篇: Unity3D之Mecanim动画系统学习笔记(六):使用脚本控制动画
下一篇: Android 判断应用前后台运行状态并获取当前 Activity 实例
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值