当前位置: 首页 > article >正文

Unity动画系统

Unity中以动画剪辑(clip)为基本单位,使用状态机控制不同clip之间的过渡,并且对于不同模型建立不同映射,人形通过avatar对模型进行骨骼绑定,从而应用动画clip

制作动画需要的资源

在这里插入图片描述
如图所示绿框中的一个FBX文件是从3dsMax或Maya到处的,在3dsMax或者Maya中制作一个游戏角色的所有完整动画,然后导出FBX的时候,可以连同动画一起导出。这里打开FBX对象,可以在inspector面板看到很多组成部分:
在这里插入图片描述
在这里有时动画需要我们自己裁剪,详见这篇文章:

第三十一章 Unity骨骼动画_unity 骨骼动画-CSDN博客

Unity 可导入本机 Autodesk® Maya®(.mb 或 .ma)、Autodesk® 3ds Max® (.max)、Blender™ (.blend) 和 Cinema 4D (.c4d) 文件以及通用 FBX 文件。请注意,要从 .blend 文件导入,需要在本地安装 Blender™。

Animation组件使用

旧版Unity的动画组件,需要使用Rig为“legacy”的FBX文件:
在这里插入图片描述
给人物添加animation组件后,可以添加一个初始动画,以及可播放的clip列表,后面用脚本控制,以及设置是否自动播放
在这里插入图片描述
animate physics控制动画是有物理的相互作用
Culling Mode:动画的裁剪模式。
Always Animate:总是启用动画,不进行裁剪。
Cull Update Transforms:更新裁切。

Animation窗口使用

Avatar 化身

Unity 为人形动画提供专门的工作流程以及扩展工具集,Unity 使用Avatar系统来识别布局中的特定动画模型是否为人形,以及模型的哪些部分对应于腿、手臂、头和躯干。由于不同人形角色之间骨骼结构的相似性,可将动画从一个人形角色映射到另一个角色,允许**重定位_反向运动学 (IK)**_。

创建avatar

从 Inspector 窗口的 Rig 选项卡中,将 Animation Type 设置为 Humanoid。默认情况下,Avatar Definition 属性设置为 Create From This Model。如果保持该选项,Unity 会尝试将文件中定义的一组骨骼映射到人形 Avatar。(此处会触发avatar文件生成)
在这里插入图片描述
这里skin weights表示可以影响单个顶点的最大骨骼数量
如果已有avatar,可以改为Copy From Other Avatar
这一步自动生成的avatar可能需要调整,生成成功时,configure左边会出现一个对号,Unity 还会将 Avatar 子资源添加到模型资源,如果 Unity 无法创建 Avatar,Configure 按钮旁将显示一个叉号,且项目视图中不显示任何 Avatar 子资源。

修改avatar

单击 Rig 选项卡上的 Configure … 按钮以打开 Avatar 窗口
这时因为scene会关闭,所以要求保存scene
在这里插入图片描述
确保骨骼映射正确,并映射了 Unity 未分配的任何可选骨骼。
骨架必须至少具备所需的骨骼才能让 Unity 产生有效的匹配。为了提高与 Avatar 相匹配的机会,请确保骨骼的命名方式反映了其所代表的身体部位。例如,“LeftArm”和“RightForearm”明确显示了这些骨骼的控制对象。
如图,可以在这个窗口手动调整对应关系:
在这里插入图片描述
也可以看出,unity的avatar body默认附带的部分有:
在这里插入图片描述
可以说是比较精细了,大多数模型都不能完全覆盖所有节点,所以其中一部分节点是optional的

Avatar 窗口底部的 Mapping 菜单中选择 Clear 来重置 Unity 尝试进行的映射

Avatar 窗口底部的 Pose 菜单中选择 Sample Bind-pose 来估算模型的初始建模姿势

选择 Mapping > Automap 从初始姿势创建骨骼映射。

选择 Pose > Enforce T-Pose 将模型设置回所需的 T 形姿势

T 形姿势__是 Unity 动画所需的默认姿势,也是在 3D 建模应用程序中建模的推荐姿势。但是,如果没有使用 T 形姿势对角色进行建模并且动画无法按预期工作,则可以从 Pose__ 下拉菜单中选择 Reset

骨骼分配正确,但角色未处于正确的姿势,将看到消息“Character not in T-Pose”。此时可从 Pose 菜单中选择 Enforce T-Pose 来修复该问题。

avatar遮罩

通过遮罩功能可以丢弃剪辑中的一些动画数据,例如,可能有一个标准的行走动画,其中包括手臂和腿部运动,但如果一个角色用双手抱着大型物体,那么不会希望其手臂在行走时向侧面摆动。但是,仍然可以在角色抱着物体时使用标准行走动画,但需要使用遮罩在行走动画的上层仅播放抱着物体动画的上半身部分。

为此需要创建 Avatar 遮罩 (Avatar Mask) 资源,并在 Animator Controller 的层设置中使用该资源。

要包含某个身体部位的动画,请在 Avatar 图中单击该部位,直到该部位显示为绿色。 要排除动画,请单击该身体部位,直到显示为红色。 要包含或排除所有部位,请双击 Avatar 周围的空白区域。

注意如果,动画不是人性的,修改humanoid部分不会生效,需要修改下面的transform
在这里插入图片描述

Animator

该组件内含controller、avatar等一系列小组件

Apply Root Motion 应用根节点运动。如果不启用,动画播放时根节点会保持在原地,需要通过脚本控制物体的移动。如果启用,如果动画中有运动,动画中的运动会换算到根节点中,根节点会发生运动。(通常用于人物/动物的运动动画)

Update Mode 设置Animator更新的时机以及timescale的设置。

  • Normal Animator按正常的方式更新(随着Update调用更新,timescale减小时,动画播放也会减慢)
  • Animate Physics Animator会按照物理系统的频率更新(根据FixedUpdate调用更新,后续会详解),适用于物理交互,例如角色加上了物理属性可以推动周围的其他物体。
  • Unscaled Time 根据Update调用更新,无视timescale。一般用于UI界面,当你使用timescale暂停游戏时,界面保持正常动画。

动画参数

动画参数是在 Animator Controller 中定义的变量,可从脚本访问这些变量并向其赋值。这是脚本控制或影响状态机流程的方法。可使用 Animator 窗口的 Parameters 部分来设置默认参数值(可在 Animator 窗口的右上角进行选择)。这些参数可分为四个基本类型:

  • Integer - 整数

  • Float - 带小数部分的数字

  • Bool - true 或 false 值(由复选框表示)

  • Trigger - 当被过渡使用时,由控制器重置的布尔值参数(以圆形按钮表示)

    可使用以下 Animator 类中的函数,从脚本为参数赋值:SetFloat、SetInteger、SetBool、SetTrigger 和 ResetTrigger

动画层

Unity 使用__动画层__来管理不同身体部位的复杂状态机。相应的示例为,您有一个用于行走/跳跃的下身层,还有一个用于投掷物体/射击的上身层。

在每一层上,


http://www.kler.cn/news/354676.html

相关文章:

  • 外包干了3周,技术退步太明显了。。。。。
  • 使用React Router实现前端的权限访问控制
  • 【Flutter】Dart:异步
  • docker容器里的时间不对,linux解决方案
  • 机器学习——向量化
  • 学习第三十六行
  • 【实战案例】树形字典结构数据的后端解决方案
  • 雷达数据与影像数据直观对比
  • YOLO的更新迭代
  • 基于SpringBoot的企业客户管理系统的设计与实现(论文+源码)_kaic
  • 软件测试CNAS实验室软件维护性测试作业指导书怎么写
  • AI大模型与相对论的结合点的思考、应用及相对论原理与公式表达
  • C++之《剑指offer》学习记录(9):字符串替换空格
  • 3D Slicer 教程五 ---- 基本功能介绍(二)
  • 五款软件神器
  • 萱仔求职复习系列——力扣
  • KafKa 集群【docker compose】
  • 刚刚,ChatGPT推出Windows客户端!
  • 111 - Lecture4
  • 如何保证接口幂等性?