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:遮罩,设置为绿色的为本层可以使用的躯体动画,红色为本层不可使用的躯体动画。

  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时间轴上的方法,充当事件源,方法内部则为要触发的事件(面向对象封装),挂载在模型上。如图:

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

注: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 权重。

Unity学习日志_动画系统简介相关推荐

  1. Unity学习日志_Unity地形系统简介

    Unity学习日志_Unity地形系统简介 地形创建: Terrain中的组件: Transform Terrain 四大功能: paint Terrain,可以选择下面几种具体的模式: Create ...

  2. Unity学习日志_车轮碰撞器简介

    Unity学习日志_车轮碰撞器简介 1. 简介: 车轮碰撞器是一种针对地面车辆的特殊碰撞体.他有内置的碰撞检测.车轮物理系统和有滑胎摩擦的参考体.除了车轮,该碰撞体也可以用于其他游戏对象. 属性: M ...

  3. Unity学习日志_七行核心代码实现第三人称游戏的相机逻辑

    七行核心代码实现第三人称游戏的相机逻辑: 使用到的一些知识: 欧拉角 虚拟轴 四元数计算 向量计算 代码实现: 其中RoundMovement方法为核心方法(): using UnityEngine; ...

  4. Unity 3D 导入三维模型||Unity 3D 动画系统简介(Mecanim)

    将三维模型导入 Unity 3D 是游戏开发的第一步. 下面以 3ds Max 为例,演示从三维建模软件中将模型导入 Unity 3D 的过程,具体步骤如下. 在 3ds Max 中创建房子模型. 执 ...

  5. Unity基础笔记(5)—— Unity渲染基础与动画系统

    Unity渲染基础与动画系统 Unity渲染基础 一.摄像机 1. 摄像机概念 和现实中的摄像机很接近,Unity 中 Camera 组件负责将游戏画面拍摄然后投放到画面上 Camera 拍摄到的画面 ...

  6. Unity学习日志_Unity父子关系与Camera

    Unity学习日志_Unity父子关系与Camera ​ 本次组件简单介绍将不包含monoBehaviour类及其向上回溯的父类. 1. 关于父子物体 ​ 首先需要声明的一点是所有游戏物体的Trans ...

  7. 【Unity 学习笔记】动画组件和动画控制器

    动画是一款游戏不可缺少的一部分.在Unity中,我们可以直接使用Unity自带的动画系统来制作我们想要的动画,其操作相当便捷. 帧动画是2D像素游戏的主流,我将以帧动画为例记录我最近学习动画系统的一些 ...

  8. Unity Mecanim 动画系统简介

    目录 前言 正文 1. Animator 组件 2. 创建 AnimatorController 3. 创建新状态 4. 状态切换 Has Exit Time: 前言 Mecanim是Unity提供第 ...

  9. 【Unity游戏开发】动画系统(二)2D动画

    文章目录 动画系统之2D动画 Unity的动画 2d动画 实例 准备工作 开始简单的动画 结语 动画系统之2D动画 2d动画其实就是图片的转换,每帧转换实现2d的动态效果其实这也是3d动画的实现原理, ...

最新文章

  1. phpstorm failed to create jvm:error code -6 解决办法 解决方法
  2. 一行Python代码能实现这么多丧心病狂的功能?(代码可复制)
  3. PHP异常处理类(文件上传提示)
  4. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )
  5. oracle学习的方法:
  6. Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话
  7. file获取文件后缀_Python 工匠:高效操作文件的三个建议
  8. CString,int,string,char*之间的转换(转)
  9. WIN10平板 如何关闭自动更新
  10. listview去掉底部多出的边框黑色
  11. 【python】通讯录制作
  12. 如何将java项目部署到linux环境(Tomcat)
  13. 文本分类入门(二)——训练
  14. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
  15. 【论文阅读笔记】基于分类器预测置信度的集成选择| Ensemble Selection based on Classifier Prediction Confidence
  16. Web Service与Rest API
  17. 如何在数字前加上0,如将1变成01
  18. 医学图像——CT值(Hu值)
  19. 用trie树实现输入提示功能,输入php函数名,提示php函数
  20. 人脸识别 Face Recognition 入门

热门文章

  1. ubuntu 下安装jdk-7u51-linux-x64
  2. how to use godoc
  3. 查询数据总数_基金净值是什么?每日基金净值如何查询?
  4. PDMReader 数据字典快速浏览工具
  5. echarts-去掉垂直网格线
  6. SpringBoot 插件化开发详细总结
  7. LOJ#10003 加工生产调度(贪心)
  8. 分层注意网络HAN介绍
  9. bug 记录 - 安卓移动端高度使用 100vh 的坑
  10. wiremock最基本的使用