Unity动画系统详解

2023-11-20

目录

动画编辑器

编辑器面板

动画复用

前言

人形重定向动画(Humanoid)

通用动画(Generic)

 旧版本动画(Legacy)

动画控制器

系统状态

切换条件

状态机脚本 

 IK动画(反向动力学)

BlendTree(混合树) 

 AnimatorOverrideController


动画编辑器

Unity动画编辑器原理是通过时间线,来改变物体组件的属性信息。比如修改Transform组件,Render组件。此外,还可以在时间线上添加动画事件,当播放动画时,在动画事件所处时间点执行设定的事件。

编辑器面板

上图中1则是当前动画片段的名称,其上面有个小红点录制功能,可以开启实时编辑模式。右边播放与快进倒退功能Samples代表动画的帧率(1秒多少帧),右边的两个标志,第一个表示添加新的一帧,第二个表示添加动画事件AddProperty表示增加属性,添加的是当前物体的组件信息或者其所有子对象的组件信息 。窗口最下面的Curves曲线编辑界面

动画复用

前言

我们知道,模型动画需要根据模型来制作相应的动画,如果不同模型用相同的动画,再编写一个动画片段工程量会大大增加。而且要知道,同一个动画片段需要共用,首先需要美术人员约定好命名规则,这样Unity才会认定这两个模型是一组模型添加动画,这样就大大降低了制作效率。这种动画叫做类动画,也就是动画模型的子物体名称都一样。而Unity推出的重定向动画模式,大大降低了制作周期与成本。

人形重定向动画(Humanoid)

所谓人形重定向动画,也就是身形不同的两个模型,比如男女模型,也能够共用一个模型动画。人形重定向动画会根据模型自动生成Avatar对象,其中记录了当前模型的人物骨骼和肌肉拉伸信息。其原理就是将不同身形的骨骼信息嵌入相同的动画来计算。

举个例子:A会说中文但不懂英文,B会说英文但不懂中文,而C作为一个翻译家,以一套标准的规则,将中文和英文联系起来,如果A具有一个Avatar,这里面存有A的骨骼信息和肌肉拉伸信息,同样B也是如此,Unity可以识别这两个Avatar,以同样的标准来识别这些信息。

 选中OptimizeGameObject复选框时,会把游戏对象的骨骼运动关信息删除。但是有些节点在程序中可能需要做逻辑,比如手上拿着东西,可以将这些特殊的节点在ExtraTransformsToExpose中勾选。

点击Gonfigure可以配置模型的骨骼信息和肌肉拉伸信息。

 其中,灰色表示没有此节点,绿色表示有此节点,虚线圆圈表示非必须,实线圆圈表示必须具有,不然会报错。不会所有导入的模型都是正确的,可以根据报错提示信息修改。

通用动画(Generic)

 通用动画不支持重定向,在模型文件的AvatarDefinition选择CreateFromThisModel时,会创建Avatar对象,动画文件会依赖这个对象。其中Rootnode表示支持带位移的动画。一般不要选择,可能会和自己编写的控制系统出冲突。其余的和人形重定向动画一样。

 旧版本动画(Legacy)

这是最早的Unity系统,优点就是比较灵魂,可以自行开发,但缺点是Unity已经不对其更新。一般不会使用。

动画控制器

Unity动画控制器的原理是状态机,提供了可视化的编辑工具,而状态机的原理是同一时刻只能播放同一种状态,Unity动画控制器还提供了层来通过多个层同时播放多种状态。

系统状态

Unity的动画控制器有三个默认的状态,这三个状态不可以被删除,而且只有Exit状态可以被连接。

 

Entry 控制器的初始状态
AnyState 任何状态都可以播放动画的特殊状态,此状态结束后可以再回到默认状态
Exit 状态机可以创建子状态,如果子状态需要回到父状态的BaseLayer,可以将子状态再连线到Exit状态

切换条件

动画控制器的状态切换通过连线切换,点击线可以设置切换条件,一共有四种条件:Float,Int,Bool,Trigger

代码设置Animator.SetBool(string,true);

状态机脚本 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : StateMachineBehaviour
{
    //进入当前状态时调用此方法
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);
    }

    //当状态更新时调用此方法,在OnStateEnter和OnStateExit之间,每帧都会调用
    public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateUpdate(animator, stateInfo, layerIndex);
    }

    //离开当前状态时调用此方法
    public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateExit(animator, stateInfo, layerIndex);
    }

    //处理动画根节点的位移
    public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateMove(animator, stateInfo, layerIndex);
    }

    //处理IK动画
    public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateIK(animator, stateInfo, layerIndex);
    }
}

 IK动画(反向动力学)

IK动画全名为Inverse Kinematics,其原理是子骨骼节点带动父骨骼节点运动,比如原神当中角色站在高度不同的地面上时,双脚的站姿高度也是不同的。

BlendTree(混合树) 

混合树用来做动画混合,根据Blend值的大小,来播放相应的动画。

 AnimatorOverrideController

在游戏中,很多模型文件的切换事件的逻辑可能都是一样的,比如一些怪物行为,它们的区别只在于动画文件不同。我们可以创建AnimatorOverrideController绑定需要覆盖的Controller文件,选择对应片段即可。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity动画系统详解 的相关文章

随机推荐

  • CMW500测试设置及问题处理

    测试CATM1需要打开eMTC Auto Mode 最新的U BLOX R510S模块 这里需要设置为RMC模式 设置为eMTC Auto Mode会出现连接后就断开的情况 没法测试 Measure subframe设置为5 不同的band
  • Kubernetes生产实践系列之三十一:Kubernetes基础技术之CPU资源的调度和管理(CFS)

    一 前言 在使用Kubernetes的过程中 我们看到过这样一个告警信息 K8S 告警主题 CPUThrottlingHigh 告警级别 warning 告警类型 CPUThrottlingHigh 故障实例 告警详情 27 throttl
  • android bluetooth UUID蓝牙查询表

    UUID是 Universally Unique Identifier 的简称 通用唯一识别码的意思 对于蓝牙设备 每个服务都有通用 独立 唯一的UUID与之对应 也就是说 在同一时间 同一地点 不可能有两个相同的UUID标识的不同服务 以
  • .Net C# 使用 IKVM 调用 Java 代码

    相关开源库 https github com ikvm revived 版本号 Net 6 JDK 8 IKVM 8 2 1 IKVM 在 8 2 0 版本中新增加 IkvmReference 在 MSBuild 中配置 自动帮你编译jar
  • 虚拟机打开vim文件以后退出方式

    如果是vi 则 Esc 退出编辑模式 输入以下命令 wq 保存后退出vi 若为 wq 则为强制储存后退出 常用 w 保存但不退出 常用 w 若文件属性为 只读 时 强制写入该档案 q 离开 vi 常用 q 若曾修改过档案 又不想储存 使用
  • python制作查询工具发给别人使用_Python 制作查询商品历史价格的小工具

    一年一度的双十一就快到了 各种砍价 盖楼 挖现金的口令将在未来一个月内充斥朋友圈 微信群中 玩过多次双十一活动的小编表示一顿操作猛如虎 一看结果2毛5 浪费时间不说而且未必得到真正的优惠 双十一电商的 明降暗升 已经是默认的潜规则了 打破这
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • 二叉树的一些练习题

    前言 二叉树的简单题目 通过画栈帧图去理解过程 画一画 走一走递归过程 理解会更加深刻 二叉树练习题 前言 二叉树的创建 二叉树先序遍历创建 PreCreat 二叉树层次创建 LevelCreat 二叉树的销毁 BinaryTreeDest
  • 二分法查找数组元素

    二分法查找元素时可以节省下极高的效率 如果有2的32次方个元素 依次查找需要查找2的32次方次 然而二分查找最多只用查找32次 程序执行的时间极大的缩短 二分法查找元素 include
  • nginx中location里面的try_files配置导致Vue设置history模式下的请求丢失参数

    nginx中location里面的try files配置导致vue设置history模式下的请求丢失参数 背景描述 在一次生产环境中 vue使用history模式在访问地址的参数会丢失 地址栏也会变成没有参数的地址 并且请求会发生301重定
  • 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解 原理 实现和时间复杂度 快速排序是对冒泡排序的一种改进 由 C A R Hoare Charles Antony Richard Hoare 东尼 霍尔 在 1962 年提出 快速排序的基本思想是 通过一趟排序将要排序的数
  • sql 字段求和_VBA+SQL-常用函数

    SQL语句中的一些简单计算函数 如max函数 SELECT MAX 列字段 AS 别名1 FROM 工作表名 如AVG函数 SELECT AVG 列字段 AS 别名1 FROM 工作表名 使用实例说明 源数据 查询内容 对英语成绩最高分 对
  • 【Java基础】day13

    day13 一 Spring Bean 生命周期是怎样的 详细过程分为以下几个步骤 初始化 Bean 容器通过获取 BeanDefinition 中的信息进行实例化 这一步仅仅是简单的实例化 并没有进行依赖注入 实例化的对象被包装在 Bea
  • 脚手架搭建react项目遇到的问题?

    一 配置proxy代理 配置代理其实很简单 但是理解其中我还不是太懂 贴一下代码看一下配置吧 说一下我遇见的问题 因为以前用webpack配置需要在config里配置devServer 网查脚手架搭建的项目不用这么麻烦 直接package
  • 【100%通过率 】【华为OD机试c++/python】日志限流【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 某软件系统会在运行过程中持续产生日志 系统每天运行N单位时间 运行期间每单位时间产生的日志条数保行在数组 records中 records i
  • 小程序中的callback使用,及面临的风险

    1 前言 在项目开发中 初步逻辑是 获取用户的openid 2 使用openid去查询用户数据表中是否有这个用户 3 如果没有这个openid的用户 非key字段 新建一条用户数据 但在实际的操作者 发现数据库会存在如下图的情况 数据库中o
  • 「Python 面试」第五次更新

    1 说一下 char varchar text 的区别 这里先介绍一下数据库的概念 数据库是一种数据结构 内含多种算法 帮助我们将数据以最优化的方式存储在计算机中 也可以帮助我们快速找到存储的数据 数据最终存储在计算机中都是以 二进制 的方
  • error: invalid operands to binary % (have ‘double‘ and ‘int‘)取模mod %

    此处出现错误 因为 不可以用于浮点型 double float类型 只能用于整型 int类型 可以强制类型转换 将浮点型强制转换为整型 解决此问题 double b int floor x 10 10 double c int floor
  • 系统架构设计师-计算机网络

    目录 一 计算机网络技术概述 1 网络概述 2 网络有关指标 3 网络分类 4 5G技术 二 组网技术 1 交换技术 2 基本交换原理 三 TCP IP协议簇 1 DHCP 2 DNS 四 网络规划与设计 一 计算机网络技术概述 1 网络概
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato