Unity学习日志_动画系统简介

2023-10-30

Unity学习日志_动画系统简介

Animation,Legacy动画系统

若要使用Animation,需要在创建Clip之前为物体手动添加Animation组件。

Animation组件面板:

在这里插入图片描述

属性:

  1. Animation:动画片段。
  2. Animations:片段数组。
  3. Play Automatically:自动播放。
  4. Animate Phsics:如果设为true,那么动画将会在 FixedUpdate 中循环,这个只有和运动学刚体一起用才有效。
  5. Culling Type:分为总是播放(Always Animate),渲染时播放(Based On Render)

Animaiton录制器:

在这里插入图片描述

面板:

从左上开始向右介绍:

  1. 在这里插入图片描述
    :开始录制动画,也可以直接修改属性值进行录制。
  2. 在这里插入图片描述
    :回到起始帧。
  3. 在这里插入图片描述
    :回退一帧。
  4. 在这里插入图片描述
    :播放动画。
  5. 在这里插入图片描述
    :前进一帧。
  6. 在这里插入图片描述
    :到达终止帧。
  7. 在这里插入图片描述
    :采样值,值越小,动画播放的速度越慢。
  8. 在这里插入图片描述
    :添加关键帧。
  9. 在这里插入图片描述
    :添加动画事件。选中添加的事件标签后在inspector面板中可选择要触发的方法。
  10. 在这里插入图片描述
    :添加要录制的组件。
  11. 在这里插入图片描述
    :时间线显示动画关键帧。
  12. 在这里插入图片描述
    :曲线图显示动画的关键帧。

代码控制:

使用Animation类的方法进行控制。

倒放动画:

Animation ani = GetComponent<Animation>();
ani["die"].time = ani["die"].length;
ani["die"].speed = -1f; 
ani.Play("die");

Animator,Mecanim动画系统

Mecanim动画系统优点:

  1. 针对人形角色提供了一种特殊的工作流,包含Avatar的创建和对肌肉的调节。
  2. 动画重定向的能力,可以非常方便地把动画从一个角色模型应用到其他角色模型上。前提是模型是类人的。
  3. 提供了可视化Animator视窗,可以直观地通过动画参数和Transition等管理各个动画间的过度。

两种模型:

人形角色设置(Humanoid)动画可以通用。动画重定向。
非人性(通用)角色设置(Generic)动画不可以通用。

模型导入界面:

在这里插入图片描述

1. Model常用设置简介:

在这里插入图片描述

  1. Scale Factor:模型缩放,推荐使用这个属性而不是使用transform中的Scale。Scale可能导致模型失真。
  2. Convert Units:是否单位转换。
  3. Import BlendShapes:导入Blendshapes(用于表情动画)。
  4. Mesh Compression:网格压缩,会导致失真。
  5. Read/Write Enable:模型可以发生形变说明模型可读可写。
  6. Optimize Mesh:最优化网格。
  7. Generate Colliders:根据模型生成碰撞器。
  8. KeepQuads:保持四边形,不转换为三角形。我们在U3D中使用的网格,大部分是把所有的面都转换成了三角形,但是某些特定的需求下,四边形会得到更好的效果,例如Tessellation shaders(细分曲面着色器)。
  9. Weld Vertices:焊接顶点,如果开启,相同位置的顶点会被合并。
2. Rig常用设置简介:

在这里插入图片描述

  1. Animation Type:None(无),Legacy(旧动画系统),Generic(通用),Humanoid(类人)
  2. Avatar Definition:骨骼动画导入模式,Create From This Model(根据本模型创建),Copy From other Avatar(套用其他骨骼动画)
  3. Root Node:根节点。(Generic中的独有选项)
  4. Optimize Game Object:最优化模型。
3. Animation常用设置简介:

在这里插入图片描述

  1. Import Animation:导入动画。
  2. Anim. Compression:动画压缩方式。有Off(不压缩),Keyframe Reduction(减少关键帧),Optimal(最优化)
  3. Rotation Error,Position Error,Scale Error:数值越大,动画越不准确,性能越好;数值越小,动画越准确,性能越差。
  4. Clips:动画裁剪。
4. 动画裁剪

在这里插入图片描述

  1. Start:动画开始处。
  2. End:动画结束处
  3. Loop Time:循环。
  4. Loop Pose:实现动作无缝衔接,循环匹配的时候,loop match为绿色。
  5. Cycle offset:动画偏移量。
  6. Root Transform:设置根变化。
    1. Bake Into Pose:勾选之后将无视动画造成的对应数值改变(有些动画可能会造成模型位移或者旋转,勾选之后会无视掉)。
  7. Miroor:镜面,勾选后,动画将左右颠倒播放。
  8. Curves:曲线
  9. Events :事件,添加原理和Animation相同。
  10. Mask:遮罩,控制器中会详细说明。
5. Materials:

在这里插入图片描述

  1. Import Materials 是否导入材质。如果否,则不生成新的材质,默认使用“Default-Diffuse”。
  2. Naming 材质命名方式。
  3. Search 材质搜索方式。

Animator面板:

在这里插入图片描述

1. 属性:
  1. Controller:动画控制器。
  2. Avatar:模型骨骼。
  3. Apply Root Motion:是否使用动画自带的位移。
  4. Update Mode:动画更新模式,有Normal(Update更新),Animation Physics(FixedUpdate更新),Unscaled Time(无视ScaleTime的Update更新)。
  5. Culling Mode:动画裁剪模式(当相机看不到游戏对象时)有Always Animate(一直更新),Cull Update Transform(Transform重定向),Cull Completely(完全禁用)
2. Avatar:

选择类人动画才可以使用该界面,当类人骨骼自动匹配失败时,可以选择Rig -》Configure来打开并手动配置。

在这里插入图片描述

  1. Mapping:
    1. Clear:清空。
    2. Automap:自动适配骨骼。
    3. load:导入骨骼信息。
    4. save:保存骨骼信息。
  2. Pose:模型摆出的姿势。
    1. Sample Bind-Pose:模型初始姿势。
    2. Enforce T-Pose:使模型摆出T姿势。
  3. Muscles&Settings:此界面可以调节具体的骨骼动画参数并观察效果,可以用于检测模型骨骼动画是否正常等。

动画控制器/状态机:

Animator可以在Project面板创建。
在这里插入图片描述

1. 右键菜单栏:

在这里插入图片描述

  1. Create State:创建动画状态,有Empty(空状态),From New Blend Tree(创建混合树)
  2. Create sub-State Machine:创建新的子状态机。可以将一个系列的连续动画做成一个子状态机来使用。
  3. Copy current StateMachine:复制当前状态机。
2. Parameters:
  1. Float
  2. Int
  3. Bool
  4. Trigger:使用一次之后自动失效。
  5. 设置方法:Animator中的set&get方法。
3. Layers:

通过设置多层动画和Mask遮罩实现多种动画一起使用,比如在跑动的时候攻击。用户可以通过“+”来创建新的动画图层。

在这里插入图片描述

  1. Weight:层权重,权重越高,则本层中的动画优先级越高。多层最高权重则按层级创建顺序决定先后。

  2. Mask:遮罩,设置为绿色的为本层可以使用的躯体动画,红色为本层不可使用的躯体动画。

    1. 在这里插入图片描述
  3. Blending:动画覆盖的方式:有Override(重写,覆盖),Additve(累加,在原动画层动画的基础上来进行本层的动画)

  4. IKpass:是否开启反向运动学,开启反向运动学之后可以使用代码通过子物体来控制父物体。在后面的代码控制详细举例。

4. 动画状态:
  1. Entry:进入状态机,Entry所连的动画状态为初始状态。
  2. Any State:任何状态都可以直接转为Any State所连的动画状态,应当配合参数使用。
  3. Exit:退出状态机,退出后会再次进入状态机。

动画状态监视器:

此面板为控制器中添加状态后点击状态可以查看的面板。

在这里插入图片描述

1. 右键菜单栏:

在这里插入图片描述

  1. Make Transition:拉出过渡线
  2. Set as Layer Default State:设为本层的默认动画(进入状态机后最先被调用的状态)。
  3. Copy:复制
  4. Create new BlendTree in State:在该状态中创建混合树。
  5. Delete:删除该状态。
2. 属性:
  1. Motion:动画片段。
  2. Speed:播放速度。
  3. Multiplier:速度的乘数。
  4. Parameter:是否使用参数调节左侧属性。
  5. Normalized Time:标准化时间。
  6. Mirror:镜像。
  7. Cycle Offset:动画周期偏移量。
  8. Foot IK:是否使用脚步动画约束。
  9. Write Defaults:是否对没有动画的属性写回默认值。
  10. Transitions:过渡线/转换。

过渡线/转换面板:

在这里插入图片描述

  1. Transtions:过渡线,Solo表示:源状态中只有过渡线可用;Mute:禁用该条过渡线。
    1. 当一个Solo被勾选,则该状态的其他过渡/转换会被Mute。
    2. 如果一个过渡/转换的Solo和Mute同时被勾选,则表现为Mute。
  2. Has Exit Time:动画过渡时是否有固定的退出时间(动画状态是否可以被直接打断)。 当勾选时只有当动画播放完后才可以进入下一状态。
  3. Exit Time:动画过渡时本状态的退出时间。
  4. Transtions Duration:转换持续时间。
  5. Transtion offset:目的状态偏移量,形象说就是时间轴中目的状态的位置。
  6. settings下面的时间轴是设置过渡时间段用的。
  7. Conditions:设置本过渡线的条件,条件取自控制器中的Parameter,分为三大部分:条件参数(取决于Parameter),条件谓词(条件逻辑词),条件值。

脚本控制:

注:Animator类通过AnimatorStateInfo类来获取当前某层的动画状态信息,通过isname方法来判断某个动画是否正在播放。

Animator常使用set方法通过设置过渡线上条件参数的值从而控制动画的播放和切换。

动画事件进阶:

在Animator中添加事件我们常常将动画事件类分为两大部分:

  1. 事件行为类EventBehaviour:此类中存放要挂在Event时间轴上的方法,充当事件源,方法内部则为要触发的事件(面向对象封装),挂载在模型上。如图:

    1. 在这里插入图片描述
  2. 事件类Event:此类负责充当监听者,负责事件的具体实现,挂载在模型空父物体上。如图:

    1. 在这里插入图片描述

注:Animator动画事件只会检测用户后添加的脚本是否含有对应事件名

混合树BlendTree:

混合树用于相似动画的混合。例如可以对角色不同方向的跑动动画来进行混合。

1D混合:

只需要一个参数控制的混合,用户需要选择一个Parameter来控制。

在这里插入图片描述

  1. Blend Type:选择混合树类型。
  2. Parameter:选择使用的参数。
  3. Parameter下方的图形:
    1. 横轴:参数范围。
    2. 纵轴:动画权重。
    3. 红线:当前参数的值所在的位置。
  4. Motion:需要绑定的动画片段或者混合树。
  5. Automate Thresholds:是否使用自动阈值。
  6. Compute Thresholds:根据用户从动画剪辑中的根部动作获取的数据设置阈值。
2D混合:

参数由一个参数分为两个参数。

在这里插入图片描述

2D Simple Directional(2D简单定向模式):

该混合模式适用于所有动画都具有一定的运动方向或者其中任意两段动画的运动方向都不相同的情形。此模式下,每一个方向上都不应存在多段动画,例如向前跑和向前走不可同时存在。

2D Freeform Directional(2D自由定向模式):

该混合模式适用于所有动画都具有一定的运动方向,但在同一方向上可以存在多段动画,例如向前跑和向前走可以同时存在。

2D Freeform Cartesain(2D自由笛卡尔模式):

该混合模式适用于所有动画具有不一定的运动方向,例如向前走然后向右转。此模式下的参数可以代表不同含义,例如x和y可以分别代表角速度和线性速度。

直接混合:

通常使用一个动画一个参数的形式。

在这里插入图片描述

直接混合常用于动画表情的混合。

IK逆向运动学:

大多数的角色动画都是通过将骨骼动画的关节角度旋转到预定值来实现的。一个子关节的位置是由父节点的旋转角度决定的,这样,处于节点链末端的节点位置是由此链条上的各个节点的旋转角和相对位移来决定的。这种决定骨骼位置的方法称为前向运动学,而反过来由子节点位置决定父节点位置的方法就叫做逆向运动学。

实际开发中,IK的应用非常广泛,如角色头部跟随,在崎岖不平的表面角色脚部会根据地面高度而抬起,都是IK的应用。

IK可以使用脚本控制。下面为常用的控制方法:

SetIKHintPosition 设置反向动力学提示的位置。
SetIKHintPositionWeight 设置反向动力学提示的转换权重(0 = 在反向动力学前的原始动画处,1 = 在提示处)。
SetIKPosition 设置反向动力学目标的位置。
SetIKPositionWeight 设置反向动力学目标的转换权重(0 = 在反向动力学前的原始动画处,1 = 在目标处)。
SetIKRotation 设置反向动力学目标的旋转。
SetIKRotationWeight 设置反向动力学目标的旋转权重(0 = 在反向动力学前旋转,1 = 在反向动力学目标处旋转)。
SetLookAtPosition 设置 LookAt 位置。
SetLookAtWeight 设置 LookAt 权重。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity学习日志_动画系统简介 的相关文章

  • Redis学习笔记

    目录 一 redis前言 1 1 Redis简介 1 2 主要特点 1 3redis 的windows安装后 1 4 修改Redis配置文件 二 redis常用数据类型 三 redis常用命令 1 字符串操作命令 2 哈希操作命令 3 列表

随机推荐

  • python爬虫,wallhaven热门壁纸多线程采集下载源码

    新年新气象 祝大家牛转乾坤 牛气冲天 过年期间收到了很多朋友的新年祝福 没有一一回应 见谅 很久没写爬虫了 手生了 在吾爱找了一个练手网站 国外的壁纸网站 wallhaven 这里采集下载热门图片为例 重温一下python图片爬虫 感兴趣的
  • Veeam 备份还原操作手册

    目录 一 安装Bakup Replication 1 1 选择 Backup Replication 1 2 选择Install安装 二 添加VC主机 2 1 VMWARE VSPHERE 添加 2 2 VC主机名 2 3 用户认证 三 配
  • Linux I/O多路复用——epoll模型实现服务端Socket通信

    目录 epoll模型 epoll函数 epoll create epoll ctl epoll wait 程序流程 水平触发 LT 边沿触发 ET select poll epoll对比 为什么ET模式下 需要将套接字设置为非阻塞式 epo
  • C语言_指针

    C语言指针 指针 这个要从直接访问与间接访问说起 在程序中一般通过变量名来引用变量的值 程序通过编译后就会把变量名转化为变量的地址 通过地址对数据进行存取操作 这种方式称为直接访问 而间接访问是将变量i的地址存放在另一变量中 然后通过该变量
  • 手写Spring框架(四)

    逻辑梳理 这部分完成AOP部分 先梳理AOP的步骤 getBean 方法作为入口 而后是几个关键的类 Context在前文都有提到 现在解释一下其他的类 AdviseSupport 通知的工具类 完成配置文件的解析 将Advise和目标类的
  • Spring bean的生命周期

    学习spring源码主框架 从源码角度开发学习Spring bean的生命周期 spring创建bean方法org springframework beans factory support AbstractBeanFactory getB
  • 程序员成长为架构师必备的十项技能

    一 卓越的程序员 1 每个好架构师都是一位出色的程序员 架构师 听起来是如此神秘的一个称号 尤其是在开发领域刚入门不久的菜鸟级程序员眼中 架构师都是高手 都是牛人 都是如此高高在上的存在 不过 在搞了四 五年编程之后 程序员们往往早已失去了
  • 【IT之路】LoadRunner系列-Win7 64bit下搭建Loadrunner11破解版

    一直想提升下性能测试知识 但是都因为这样那样的原因 没有实际上系统梳理下 在此 刚好空出时间来了 一步步把性能测试知识重新拾一下 本文介绍的是在vmware的环境下进行的Loadrunner环境搭建 一 环境准备 Win7 64bit Lo
  • 云计算基础知识:

    云计算 cloud computing 是分布式计算的一种 指的是通过网络 云 将巨大的数据计算处理程序分解成无数个小程序 然后 通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户 云计算早期 简单地说 就是简单的分布式计
  • 数据结构(一)数组

    概述 说起数组我们都不陌生 几乎在每一种编程语言中 基本上都会有数组这种数据类型 不仅如此它还是是最基础最简单的数据结构 尽管如此 可能还是有一些人并没有真正的理解这个基础数据结构的精髓所在 首先 我们都知道 在java中数组是从 0 开始
  • Linux-epoll机制

    主要接口 epoll create epoll ctl epoll wait epoll create 头文件 include
  • Windows核心编程:字符和字符串处理

    Windows核心编程 字符和字符串处理 1 字符编码 ANSI 字符 一个字符一字节 8位 最多只能表达256个字符 UTF 的全称是Unicode Transformation Format Unicode转换格式 UTF 16 将 每
  • Transformer哲学

    一切苦痛 皆为过往 当我们科研遇到困难时 请大胆寻求Transformer的帮助吧 Transformer用一种苍老的声音问询 你有什么 你要什么 你怎么给我这些东西 一个翻译任务 我有英文 我需要中文 我以embedding形式给 一个目
  • Spring的@Component 、@Value 和 Springboot 的 @Component 、@ConfigurationProperties 使用

    application yml配置 book name 一个人的朝圣 author 蕾秋 乔伊斯 age 35 Spring的 Value 程序代码里 Spring主要在 Value注解的参数中使用EL表达式 注入普通字符串 注入操作系统属
  • C++异常处理机制的详细介绍

    1 C 异常处理的套路 1 1 C 异常处理机制之抛出异常关键字 throw 1 2throw关键字的使用 在哪可能出现异常就在哪里使用throw关键字抛出异常 这个异常可以使用一个常量 字符串 或类对象 都可以来抛出 throw 常量 字
  • 最佳买卖股票时机含冷冻期

    题目 给定一个整数数组 其中第 i 个元素代表了第 i 天的股票价格 设计一个算法计算出最大利润 在满足以下约束条件下 你可以尽可能地完成更多的交易 多次买卖一支股票 你不能同时参与多笔交易 你必须在再次购买前出售掉之前的股票 卖出股票后
  • 手游SDK-悬浮球

    一 游戏内显示悬浮球 手游SDK的悬浮球和一般的悬浮窗有点不一样 它只需要在游戏内显示即可 不需要也不能在桌面中显示出来 所以如果使用WindowManager创建悬浮窗 需要监听App是否在前台 如果在 则显示 如果不在则隐藏悬浮窗 而A
  • yolov7 姿态 pose训练部署笔记

    目录 pytorch开源相关资料 有tensorrtc 代码 预测时间测试结果 导出onnx代码
  • oppor15android版本8.1,OPPO R15搭载最新ColorOS 5.0系统,基于安卓8.1更好用

    原标题 OPPO R15搭载最新ColorOS 5 0系统 基于安卓8 1更好用 手机的发展十分之快 硬件性能普遍过剩 而手机系统的更新迭代变得异常重要 而越来越多的消费者也意识到这个问题 想获得更好的使用体验 不仅仅是硬件上的支持 操作系
  • Unity学习日志_动画系统简介

    Unity学习日志 动画系统简介 Animation Legacy动画系统 若要使用Animation 需要在创建Clip之前为物体手动添加Animation组件 Animation组件面板 属性 Animation 动画片段 Animat