Unity核心6——Animation

这篇具有很好参考价值的文章主要介绍了Unity核心6——Animation。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、动画窗口

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

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

​ 原理:

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

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

​ 动画时间轴:

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

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

​ 动画中的帧:

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

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

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

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

Unity核心6——Animation

  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核心6——Animation

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

Unity核心6——Animation

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

(三)曲线设置

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

Unity核心6——Animation

  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 面板看到如下参数:

Unity核心6——Animation

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

三、老动画系统

(一)老动画系统

​ Unity 中有两套动画系统

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

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

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

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

​ 关键组件:Animation

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

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

Unity核心6——Animation

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

(二)参数介绍

Unity核心6——Animation

  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();
}

(四)动画事件

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

Unity核心6——Animation

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

Unity核心6——Animation

四、Animator 窗口

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

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

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

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

​ 举例说明:

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

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

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

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

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

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

(二)动画状态机窗口

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

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

Unity核心6——Animation

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

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

  3. 网格化布局区域:

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

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

    默认三大矩形:

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

    人为添加矩形:

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

​ 添加动画:

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

​ 添加切换连线:

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

​ 添加切换条件:

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

Unity核心6——Animation

​ 设置切换条件:

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

Unity核心6——Animation

五、Animator

(一)参数介绍

Unity核心6——Animation

  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 也是和这四种类型有关系的文章来源地址https://www.toymoban.com/news/detail-496555.html

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("状态名");

到了这里,关于Unity核心6——Animation的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 制作动画 - Animation 的使用

    1. unity 顶部导航栏点击 Window  Animation 打开 Animation 窗口 通过这个窗口可以创建、编辑动画,也可以查看导入的动画。Animation 窗口同一时间只能查看、编辑同一段Clip中的动画 2. 选中 Hierarchy 面板中的节点, 也就是要制作动画的物体,该物体上没有动画,可以点击Animation窗口

    2024年02月15日
    浏览(31)
  • Unity Animation -- 使用Animator控制动画

            在很多实际场景中,我们经常需要根据特定的事件(比如玩家输入,敌人受到攻击等)来播放不同的动画。这需要我们了解一下Animator,Animator Controller和基础的动画状态机。         首先我们来创建一个简单的开门动画,示例中的门的模型来自官方教程。其实我们也

    2023年04月27日
    浏览(59)
  • Unity核心6——Animation

    ​ 通过 Window  --  Animation  --  Animation 打开 Animation 窗口 ​ Animation窗口主要用于在 Unity 内部创建和修改动画,所有在场景中的对象都可以通过 Animation 窗口为其制作动画 ​ 原理: ​ 制作动画时:记录在固定时间点对象挂载的脚本的变量变化 ​ 播放动画时:将制作动画时

    2024年02月10日
    浏览(31)
  • Unity用Animation组件制作简单的动画

    游戏中经常会出现动态提示,例如提示当前金钱不足,一般会从屏幕中央弹出,然后缓慢的向上飘去。 今天游戏项目中遇到了这么个要求,以前做过几次,但总是会忘记,而且随着unity版本更新,新版本总有些莫名其妙的坑,今天写个文章记录一下。 首先用到的组件是Anima

    2024年02月04日
    浏览(45)
  • Unity 踩坑笔记 Animation动画不播放

    情况① 物体单挂Animation,无Animator,无法自动播放 原因 :两种Animation Clip 解决方案 : 注:此举会使其绑定的Animator失效 情况② 与上述相反,动画在Animator中无法播放 解决 :取消Legacy

    2024年02月12日
    浏览(33)
  • Unity中Animation创建的动画如何指定播放

    使用Unity自带的Animation制作的动画如何指定帧播放和结束? 1.选择需要播放的动画,Inspector面板右键Debug,勾选Legacy 2.添加脚本,挂载脚本

    2024年02月03日
    浏览(42)
  • unity中legacy动画用animation播放【播放,正播,倒播,重播】

    目前unity中有两种动画,一种是legacy动画,用Animation播放, 另一种是Mecanim,用Anamator播放。 本文只讨论legacy动画的播放,不涉及其它动画,也不涉及legacy动画的制作。 确保物体上已经挂了动画,一般只有一个动画片段。检查是否能播放:勾选自动播放,点击运行进行测试。

    2024年02月06日
    浏览(37)
  • Unity Animation动画循环播放时卡顿、不连贯问题解决办法

    一、动画卡顿: 如上图,可看到,当循环播放动画时,动画像瘸了似的,一会块,一会慢,总之就是不连贯; 二、解决办法: 打开该元素对应的Animation,然后选中下方的Curves动画曲线,在这里我们可以看到,该动画是一条S型曲线,故而播放速度才会时快时慢; 在这里,我

    2024年02月12日
    浏览(31)
  • Unity简单操作:设置触发条件 切换Animator动画控制器 里面播放的Animation动画

    确保animator里面有多个animation动画剪辑,点击Animator里面[Parameters]添加触发条件   添加连线箭头并且 给箭头连线绑定触发事件  添加连线箭头并且 给箭头连线绑定触发事件  

    2024年02月04日
    浏览(47)
  • 【Unity】渲染性能开挂GPU Animation, 动画渲染合批GPU Instance

    博文介绍了最基本的实现原理,有些老板懒得折腾,所以特意熬了几个秃头的夜把RVO、BRG、GPU动画、海量物体目标搜索等高度封装成了开箱即用的插件。 划重点!!此方案是绕开Entities(ECS),不用写一行ECS代码,现有MonoBehavior开发工作流享受Entities渲染的性能。已有项目也能使

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包