Unity核心6——Animation

news2024/11/23 12:17:59

一、动画窗口

​ 通过 Window --> Animation --> Animation 打开 Animation 窗口

​ Animation窗口主要用于在 Unity 内部创建和修改动画,所有在场景中的对象都可以通过 Animation 窗口为其制作动画

​ 原理:

​ 制作动画时:记录在固定时间点对象挂载的脚本的变量变化

​ 播放动画时:将制作动画时记录的数据在固定时间点进行改变,产生动画效果

​ 动画时间轴:

​ 每一个动画文件都有自己的一个生命周期,从动画开始到结束

​ 我们可以在动画时间轴上编辑每一个动画生命周期中变化

​ 动画中的帧:

​ 假设某个动画的帧率为 60 帧每秒,意味着该动画 1 秒钟最多会有 60 次改变机会

​ 每一帧的间隔时间是 1s / 60 ≈ 16.67 毫秒

​ 也就是说 我们最快可以每 16.67 毫秒改变一次对象状态

​ 关键帧:动画在时间轴上的某一个时间节点上处于的状态

  1. 预览模式(开关)
  2. 录制模式(开关),打开后预览模式默认开启
  3. 回到动画开头
  4. 上一个关键帧(快捷键:“,”)
  5. 播放动画(快捷键:“Alt” + “,”)
  6. 下一个关键帧(快捷键:“。”)
  7. 回到动画结尾(快捷键:“Alt” + “。”)
  8. 当前处于第几帧
  9. 按选择筛选
  10. 添加关键帧
  11. 添加事件
  12. 关键帧模式
  13. 曲线模式

二、创建与编辑动画

(一)创建动画

  1. 在场景中选中想要创建动画的对象

  2. 在 Animation 窗口中点击创建

  3. 选择动画文件将要保存到的位置

保存动画文件时,Unity 会帮助我们完成以下操作

  1. 创建一个 Animator Controller(动画控制器或称之为动画状态机)资源(新动画系统)

  2. 将新创建的动画文件添加到 Animator Controller 中

  3. 为动画对象添加 Animator 组件

  4. 为 Animator 组件关联创建的 Animator Controller 文件

(二)编辑动画

​ 创建 Animation 文件后,点击对应的游戏对象,才可以编辑动画界面。在这里切换需要编辑的 Animation 文件

​ 这里可以添加变化属性,也可以任意添加想要在动画中变化的脚本变量

​ 也可以在录制模式下直接选中对象修改其属性,Unity 会自动记录这样的改变

(三)曲线设置

​ 点击 Curves,进入曲线设置。右键一个序列帧,会出现如下的参数:

  1. Delete Keys:删除关键帧
  2. Edit Keys:编辑关键帧
  3. Clamped Auto:切线模式,自动设置切线
  4. Auto:旧版切线模式,和 Clamped Auto 类似,主要用于老动画系统,建议不使用,除非是老动画
  5. Free Smooth:自由设置切线
  6. Flat:切线设置为水平
  7. Broken:单独控制左右曲线切线
  8. Left / Right / Both Tangent:切线的模式
    • Free:自由设置
    • Linear:直线
    • Constant:常量切换
    • Weighted:权重切换

(四)Animation 文件界面参数

​ 点击 Animation 文件,在 Inspector 面板看到如下参数:

  1. Loop Time:是否循环播放
  2. Loop Pose:起点和终点是否无缝衔接
  3. Cycle Offset:循环动画在其他时间开始时的周期偏移

三、老动画系统

(一)老动画系统

​ Unity 中有两套动画系统

  • 新:Mecanim 动画系统——主要用 Animator 组件控制动画
  • 老:Animation 动画系统——主要用 Animation 组件控制动画(Unity4 之前的版本可能会用到)

​ 目前我们为对象在 Animation 窗口创建的动画都会被新动画系统支配

​ 有特殊需求或者针对一些简易动画,才会使用老动画系统

​ 老动画系统主要用于处理老版本项目和简单的一些自制动画,新项目都不建议大家使用了

​ 关键组件:Animation

​ 注意:在创建动画之前为对象添加 Animation 组件之后再制作动画,这时制作出的动画和之前的动画格式是有区别的,创建动画时 Unity 不会自动生成动画状态机 Animator

​ 同时,创建的动画文件中显示的参数也和之前的不一样

  • Default:读取设置得到更高的默认重复模式
  • Once:播放一次就停止,播放结束
  • Loop:从头到尾不停循环播放
  • PingPong:从头到尾、再从尾到头播放,不断循环
  • ClampForever:播放结束后会停留在最后一帧,并且会一直播放最后一帧,状态不停止,一直在播放动画。表现效果和 Once 一样

(二)参数介绍

  1. Animation:默认播放的动画
  2. Animations:该动画组件可以控制的所有动画
  3. Play Automatically:是否一开始就自动播放默认动画
  4. Animate Physics:动画是否与物理交互
  5. Culling Type:决定什么时候不播放动画
    • Always Animate:始终播放
    • Based On Renderers:基于默认动画姿势剔除

(三)代码控制老动画系统

private Animation animation;

void Update()
{
    // 1.播放动画
    animation.Play("1");
    animation.Play("2");

    // 2.淡入播放,自动产生过渡效果
    //   当你要播放的动画的开始状态 和当前的状态 不一样时 
    //   就会产生过渡效果
    animation.CrossFade("3");

    // 3.前一个播完再播放下一个
    animation.PlayQueued("2");
    animation.CrossFadeQueued("2");

    // 4.停止播放所有动画
    animation.Stop();

    // 5.是否在播放某个动画
    if (animation.IsPlaying("1")) { }

    // 6.播放模式设置
    animation.wrapMode = WrapMode.Loop;

    // 7.其它(了解即可,新动画系统中会详细讲解)
    //   层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
    // 设置层级
    animation["1"].layer = 1;
    // 设置权重
    animation["1"].weight = 1; 
    // 混合模式 叠加还是混合
    animation["1"].blendMode = AnimationBlendMode.Additive;
    // 设置混组相关骨骼信息
    animation[""].AddMixingTransform();
}

(四)动画事件

​ 动画事件主要用于处理,当动画播放到某一时刻想要触发某些逻辑,比如进行伤害检测、发射子弹、特效播放等等

​ 在 Inspector 面板中选择 Function 添加进事件,这里的 Function 需要我们自己在脚本中写方法挂载到对应物体上

四、Animator 窗口

(一)有限状态机(Finite - state machine,FSM)

​ 又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型

​ 有限:表示是有限度的不是无限的

​ 状态:指所拥有的所有状态

​ 举例说明:

​ 假设我们人会做很多个动作,也就是有很多种状态,这些状态包括 站立、走路、跑步、攻击、防守、睡觉等等

​ 我们每天都会在这些状态中切换,而且这些状态虽然多但是是有限的,当达到某种条件时,我们就会在这些状态中进行切换,而且这种切换时随时可能发生的

​ 游戏开发中有很多功能系统都是有限状态机,最典型的状态机系统

​ 动作系统 —— 当满足某个条件切换一个动作,且动作是有限的

​ AI(人工智能)系统 —— 当满足某个条件切换一个状态,且状态时有限的

​ 所以状态机是游戏开发中一个必不可少的概念

(二)动画状态机窗口

​ 创建动画状态机的两种方式:

  • 通过为场景中物体创建动画时自动创建,名称和物体名称一样
  • 手动创建动画状态机文件

  1. Layers:动画层级页签,为动画添加更多的层级,层级高的动画播放会覆盖层级低的

  2. Parameters:参数页签,为动画状态机添加控制状态切换的参数

  3. 网格化布局区域:

    主要用于编辑状态之前的切换关系

    • 窗口中的每一个矩形表示一个状态
    • 窗口中的每一个箭头表示一个切换条件

    默认三大矩形:

    • 绿色 Entry 矩形:进入状态机流程
    • 红色 Exit 矩形:退出状态机流程
    • Any State:任意状态,代表状态机中的任意状态

    人为添加矩形:

    • 橙色矩形:一开始的默认状态动画,和 Entry 相连表示一开始播放的动画
    • 灰色矩形:自己添加的某一种动作状态

​ 添加动画:

  • 自动添加——为对象创建动画后会自动将动画添加到状态机中
  • 手动添加1——将动画文件拖入到状态机中(注意:老动画拖入会有警告)
  • 手动添加2——右键创建状态,再关联动画

​ 添加切换连线:

​ 选择一个状态,右键选择 Make Transition 添加连线,再点击想要连接的状态即可

​ 添加切换条件:

​ 在左侧面板点击参数页签,可以在这里添加 4 种类型的切换条件

​ 设置切换条件:

​ 点击连线,在 Inspector 面板中的 Conditions 添加切换条件,多个条件存在时会进行与操作判断:

五、Animator

(一)参数介绍

  1. Controller:对应的动画控制器(状态机)
  2. Avatar:对应的替身配置信息(3D 模型相关)
  3. Aplly Root Motion:是否启用动画位移更新
  4. Update Mode:更新模式,一般不修改
    • Normal:正常更新
    • Animate Physics:物理更新
    • Unscaled Time:不受时间缩放影响
  5. Culling Mode:裁剪剔除模式
    • Always Animate:始终播放
    • Cull Update Transforms:摄像机没有渲染该物体时,停止位置、IK 的写入
    • Cull Completely:摄像机没有渲染物体时,整个动画被完全禁用

(二)代码控制

​ 我们用代码控制状态机切换主要使用的就是 Animator 提供给我们的 API

​ 我们知道一共有四种切换条件:int、float、bool、trigger,所以对应的 API 也是和这四种类型有关系的

private Animator animator;

// 1.通过状态机条件切换动画
animator.SetFloat("条件名", 1.2f);
animator.SetInteger("条件名", 5);
animator.SetBool("条件名", true);
animator.SetTrigger("条件名");

animator.GetFloat("条件名");
animator.GetInteger("条件名");
animator.GetBool("条件名");

// 2.直接切换动画 除非特殊情况 不然一般不使用
animator.Play("状态名");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python提供的68个内置函数:一个全面的指南

Python提供的68个内置函数:一个全面的指南 Python是一种强大的编程语言,具有出色的生态系统和强大的功能。它提供了许多内置函数,这些函数可以使你的编程任务变得更加容易和高效。本篇文章将介绍Python提供的68个内置函数,帮助你…

chatgpt赋能python:Python排版快捷键:提高效率的必备技能

Python排版快捷键:提高效率的必备技能 随着Python编程语言的广泛应用,作为开发者,我们不仅需要注重代码质量,还需要注重代码的可读性。在编写Python代码时,排版也是一项重要的任务。好的排版不仅使代码更易于理解&…

k8s日志收集组件 Grafana loki --- 理论篇

当我们在k8s上运行程序时,习惯的会使用ELK来收集和查询程序运行日志。今天我们介绍一款新的专为日志收集而生的神器:Grafana loki。Grafana Loki 是一组组件,可以组合成一个功能齐全的日志堆栈。 与其他日志记录系统不同,Loki 仅…

VUE 2X 数据代理 ④

目录 文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持✨ V u e j s Vuejs Vuejs数据代理 什么是数据代理❓ 代理底层~ D e f i n e P r o p e r y DefinePropery DefinePropery V u e Vue Vue数据代理原理理解总结 文章有误…

Xubuntu22.04之便签工具(一百八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

三、Kafka的消费全流程

Kafka的消费全流程 我们接着继续去理解最后这条消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 多线程安全问题 当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线…

深度学习实战39-U-Net模型在医学影像识别分割上的应用技巧,以细胞核分割任务为例

大家好,我是微学AI,今天给大家介绍一下深度学习实战39-U-Net模型在医学影像识别分割上的应用技巧,以细胞核分割任务为例。本文将介绍在医学影像分割领域中应用U-Net模型的方法。我们将从U-Net模型原理出发,并使用PyTorch搭建模型,详细展示模型代码。接着,我们将展示一些医…

I.MX RT1170之FlexSPI(2):LUT表格的组成和FlexSPI结构体配置

从上一节FlexSPI的框图中可知,SEQ_CTL实现了对外部存储器的时序控制。不同的存储器有着不同的时序,这个时序就是由LUT(Look Up Table)指定的。LUT有它自己的寄存器,当我们设置好之后,外部存储器的读、写和擦除等操作就会根据LUT寄…

《网络安全0-100》安全事件案例

网络安全事件案例分析 2017年Equifax数据泄露事件 Equifax是美国一家信用评级机构,2017年9月,该公司披露发生了一起重大的数据泄露事件,涉及1.43亿美国人的个人信息,包括姓名、出生日期、社会安全号码等敏感信息。经过调查&#…

《OpenCV 计算机视觉编程攻略》学习笔记(一:图像编程入门)

1、参考引用 OpenCV 计算机视觉编程攻略(第3版)本书结合 C 和 OpenCV 3.2 全面讲解计算机视觉编程所有代码均在 Ubuntu 系统中用 g 编译执行 0. 安装 OpenCV 库 在Ubuntu上安装OpenCV及使用OpenCV 库分为多个模块,常见模块如下 opencv_core …

Python数据可视化 - 使用Python dash搭建交互式地图可视化看板

1.前言 前几年刚接触Dash库的时候,Dash生态还不太成熟,做些简单的web还行,复杂的、系统性还是得用flask或django来实现。随着这两年dash的不断迭代更新,以及dash大佬feffery相继开发了feffery_antd_components、feffery_leaflet_…

编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理

目录 语法分析器是编译器前端的核心语法错误的处理语法错误的处理目标语法错误的基本恢复策略 语法分析器是编译器前端的核心 语法分析器的两项主要任务,分别: 是根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树…

uboot下UCLASS框架详解---结合项目工作中spi master和flash驱动开发

文章目录 一、综述二、UCLASS架构解析2.1 uclass2.2 udevice2.3 uclass driver2.4 driver2.4.1 spi master driver 三、uboot代码解析3.1 DM的初始化3.2 spi norflash设备识别3.3 设备树内容3.4 .config配置3.5 spi读写测试 四、其他相关链接1、SPI协议详细总结附实例图文讲解通…

IDEA合并分支和.gitignore可能遇到的问题

将本地的 v1 分支合并到 master 分支上 1.确认你在 master 分支上,在命令行执行以下命令,这将切换到 master 分支。 git checkout master 2.拉取最新代码 在合并分支之前,请确保您的代码库是最新的。在命令行执行以下命令,这将从…

一文解决C/C++中所有指针相关知识点

本篇会对C/C中【常见指针相关知识】一直进行总结迭代,记得收藏吃灰不迷路,一起学习分享喔 请大家批评指正,一起学习呀~ 一、指针基本知识1.1 指针的定义1.2 (*) 和( &) 运算符1.3 如何声明…

使用omp并行技术加速bfs广度优先算法

基本思想 从初始状态S开始,利用规则,生成所有可能的状态。构成树的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则。生成再下一层的所有状态节点,对这一层的…

chatgpt赋能python:Python在SEO中的排名

Python在SEO中的排名 Python作为一门高级编程语言,已经有近三十年的历史,被广泛用于各个领域的开发,包括 Web开发、数据分析、机器学习等。在 SEO 中,Python 也具有很高的应用价值。本文将会介绍 Python 在 SEO 中的应用以及其排…

C语言进阶教程(一个可执行文件生成的具体步骤)

文章目录 前言一、预处理二、编译三、汇编四、链接总结 前言 本篇文章来讲解一个.c文件生成一个可执行文件的完整过程,我们学习了那么久,只知道在编译器中按下编译运行就可以将一个.c文件运行起来了,但是我们并不了解其中的具体步骤&#xf…

【openGauss简单数据库管理---快速入门】

【openGauss简单数据库管理---快速入门】 🔻 一、openGauss数据库管理🔰 1.1 连接openGauss数据库🔰 1.2 创建数据库🔰 1.3 查看数据库和切换数据库🔰 1.4 修改数据库🔰 1.5 删除数据库🔰 1.6 启…

高等代数复习(二)

本篇复习内容有 求解标准正交基 证明标准正交基 证明正交变换 利用共轭变换证明 求解与给定矩阵的相似矩阵--对角矩阵 1.求标准正交基 在求标准正交基时,通常要先正交化,然后单位化,即可求出标准正交基。 2.证明标准正交基 标准正交基单位…