Unity游戏开发之游戏动画(Unity动画系统)

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

Unity动画系统

Unity动画系统分为

  • 动画片段 Animation Clip: 动画资源,与模型无关
  • 动画状态机 Animator Controller:帮助我们跟踪当前动画的播放状态,并且根据设置觉得如何切换动画片段
  • 动画组件 Animator Component:玩家角色需要播放动画功能时,需要动画组件,将游戏对象需要的动画状态机(以及替身)放入该组件,之后便可以在游戏脚本中自由访问该组件,从而自由控制游戏对象动画。
  • 替身 Avatar:人形动画骨骼的标准,所有按照同一标准配置好的人形角色都可以播放同一套动画。

动画片段 Animation Clip

在Unity中制作动画

  1. 点击Window,打开animatioin窗口
  2. 选中需要制作动画的物体,点击create,选择一个位置保存。
    Unity为我们在保存位置生成了一个动画片段(.anim) 文件和一个pivet 动画状态机(.controller),
    并且,在需要制作动画的物体上挂在了一个 Animator组件

注:动画片段文件(.anim)是使用标记语言YAML编写的文件(Unity中绝大多数文件都是使用YAML来记录的)

  1. 选中物体,切换到Animation视图,选中这里的add Property,选择要对哪些属性进行变换
    Unity游戏开发之游戏动画(Unity动画系统),Unity,unity,游戏,游戏引擎
  2. 时间标尺的默认长度为1s,在起始位置0s和结束位置1s处各有一个关键帧。
  3. 选择对应的关键帧,或在任意位置修改数据,即可创建关键帧。修改关键帧后,中间的帧可根据两边关键帧插值计算得到。
    Unity游戏开发之游戏动画(Unity动画系统),Unity,unity,游戏,游戏引擎
  4. 点击左下角的Curves,我们就能已曲线的形式观察并修改当前的动画片段
  5. 打开动画片段文件(.anim),在检视视图下看到Euler:1,说明包含一段欧拉角运动。
    Unity游戏开发之游戏动画(Unity动画系统),Unity,unity,游戏,游戏引擎

动画复用

当动画文件只对应一个物体的时候,可以复用到任何一个物体上。

当动画文件要处理多个物体或多个游戏对象时,会在文件中写上该物体的对象名称,unity会通过文件里的这个名称找到正确的游戏对象。
如果游戏对象的名字和动画文件中的不一致,就无法正常播放。

动画复用,当骨骼结构一致,命名也一致,就可以对动画文件进行复用。

当骨骼结构相似,但动画命名不一致时,修改命名以及骨骼系统就可以复用动画,但Unity对人形骨骼有简便的处理方式:Avator

替身系统 Avatar

当两个角色的命名方式不一样时,动画不能复用。
如下:名称不匹配,会在Animation窗口显示Missing!
Unity游戏开发之游戏动画(Unity动画系统),Unity,unity,游戏,游戏引擎
使用替身系统,需要为两个模型都添加替身,使得两模型替身命名方式相同。

  1. 模型创建Avatar,对所有模型创建,并可在Avatar配置中对模型的修改量进行参数设置。具体可看【Unity动画系统详解 四】八分钟理解并掌握Avatar和人形动画复用【Unity开发入门教程12】 5:05
  2. 对A模型的动作配置A模型的Avatar,对B模型的动作配置B模型的Avator。
  3. 新建Animator Controller,在动画状态机中添加动作。
  4. 对场景中的角色模型添加Animator组件,不同的模型选择不同的Avatar,但可以共用相同的动画状态机。

Animator 组件 Animator Component

  • Controller 动画状态机
  • Avatar 替身系统:在组件这里,还担任了一个传令兵的职责,会在当前对象以及子对象中层层寻找符合要求的模型。
  • Apply Root Motion:有些动画自带位移,如果希望动画位移应用在游戏上,则勾选。
  • update mode:动画的刷新模式(重新计算每个骨骼结点的位置转向和缩放的数值)
    • normal:和帧率同步(update())
    • Animate Physics:与物理引擎同步(fixedUpdate())
    • Unscaled Time:和帧率同步,但会忽略时间标尺,及当修改时间标尺(游戏中1s对应现实2s,则Unscaled Time不受影响)
  • Culling Mode 剔除模式: 当游戏对象没有被看到时,如何处理
    • Always Animate : 动画不受影响
    • Cull Update Transforms:剔除关于IK之类的操作
    • Cull Completely:完全停止动画

动画状态机 Animator Controller

动画状态

动画状态的类型
  • 单独的动画片段

添加单独动画片段的三种方法
1. 新建空状态,再添加动画
2. 选中动画,右键添加
3. 直接拖动动画

  • 多个动画片段组成的混合书 Blend Tree
  • 另一个动画状态机
动画状态的属性
  1. 名称:修改状态机中展示的文本,以便管理
  2. 标签Tag:给不同的动画状态打上标签进行分类,可在脚本中便于统一管理
//获取当前状态机正在播放的动画状态
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(animator.GetLayerIndex("层级名称"));
//通过标签对不同的标签动画,做不同的事
if(stateInfo.isTag("标签名称")){
	......
}
  1. Motion :动画片段或混合树
  2. Speed:动画的播放速度(不能通过脚本更改)
  3. Multiplier:动画实际速度为Speed与Multiplier的乘积(设置Parameter后,可通过脚本修改参数)
  4. Motion Time:播放动画的时间点(注意:只会播放单帧)【适合制作单帧2D动画】
  5. Mirror:镜像动画
  6. Cycle Offset:动画播放的起始位置[0,1]
  7. Foot IK:使用了IK的动画矫正机制
  8. Write Defaults :默认开启,是否为其运动未动画化的属性写回默认值。但是有很大的坑,一般情况下禁用。
    [Unity] AnimatorStates中的write defaults详解:https://blog.csdn.net/rickshaozhiheng/article/details/77838379

动画状态机----动画转换

点击状态,可看到状态下的所有转化。

  • 如果有勾选Solo的转化,只对勾选Solo的状态转换,
    • 哪个转换的条件先满足,就执行哪个转换。
    • 如果条件同时满足,则执行最上面的转换
  • 如果没有勾选Solo的转换
  • 对勾选了Mute的转换永远不会执行
转换属性的配置面板
  • Has Exit Time : 当前动画状态播放到某个时间点的时候,就执行这个转换。如果不勾选,就必须在Conditions下对转换添加其他条件。
  • 展示图
    Unity游戏开发之游戏动画(Unity动画系统),Unity,unity,游戏,游戏引擎
    • 最上方的白线:Root motion动画在水平方向上的位移
  • Exit Time:动画开始转化的时间(勾选Has Exit Time下有效)
  • Fixed Duration : 转换的持续时间
    • 勾选(按秒读),后面有(s)
    • 不勾选(按百分比读),后面有(%)
  • Transition Offset:进入下一个动画片段时下一个动画开始播放的偏移量,取值[0,1]。
  • Interruption Source : 表示哪些转化可以打断当前这个转换
    • None:当前这个状态不可被打断
    • Current State:可以被当前出发状态的其他转换打断
    • Next State:可被从目的状态出发的其他转换打断
    • Current State Then Next State:出发状态的其他状态优先
    • Next State Then Current State:目的状态的其他状态优先
  • Ordered Interruption:默认被勾选,只有优先集比当前转换的优先级高的转换才可打断当前转换(点击状态,状态转化栏中,越靠上的优先级越高)。不勾选的话,则不考虑优先级。
  • Conditions
    • 使用setTrigger,setInt等激活触发器或来改变条件的值设置值
    • 如果与Trigger相关联的动画并没有被执行,trigger就会一直处于激活状态,直到转换被执行。
    • 转换条件可以设计多条,之间的关系为逻辑与(当所有条件都满足时才会转换)

动画状态机—层级和参数

Layers 用于组合动画
  • 权重:当前层级会在多大程度上影响整个动画的最终表现
  • Mask用于层级遮蔽,过滤不受影响的点,既可以在Humanoid中点击设置,也可以在Transfrom中精准设置可以被影响的点
    使用Mask后,【层级会标注M来表示】。
  • Blending【覆盖override、添加additive】
  • sync 同步:与某个层级保持一致、状态转化相同
    • Timing
  • IK Pass:当前层级使用IK则打开【层级会标注IK来表示】

越向下,优先级越高文章来源地址https://www.toymoban.com/news/detail-539543.html

  • Parameters
//修改参数值
animator.SetFloat("参数名称",);
animator.SetBool("参数名称",);
//内部会自动转为Hash值,及如下方法
animator.SetFloat(Animator.StringToHash("参数名称"),);
//获取参数值
animator.getInt("参数名称");

到了这里,关于Unity游戏开发之游戏动画(Unity动画系统)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小游戏开发之unity-精灵的创建动画和操作移动

    我们的目标是通过unity开发微信小游戏! 这是第一篇正式实战开发文章,将会很详细介绍每一个步骤和代码。 废话不多说直接操作! 由于目标开发游戏是2D小游戏,我们选择2D核心模板. 我们的目标是开发微信小游戏所以我们需要修改setting,选择运行平台选择转换 WebGL ,刚开

    2024年01月16日
    浏览(55)
  • 【Unity游戏开发中的常见问题第二卷】AnyState小坑导致动画卡在第一帧

    在使用 Unity 自带的 Animator 时偶然出现的问题,有一个动画是通过 Any State 传递的,然后碰到了一直卡在第一帧的情况,其实是一个设置问题,需要把 Can Transition To Self ,可能也有其他原因导致类似问题的发生,不过感觉这应该是新手常碰的问题了~ 如果你不禁用传输到自身

    2024年02月16日
    浏览(41)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(33)
  • Unity GPU Skinning Tool: 提升3D游戏动画性能的新利器

    项目地址:https://gitcode.com/ForeverZack/Unity-Gpu-Skinning-Tool 在Unity引擎的世界里,Unity GPU Skinning Tool是一个强大的工具,它将骨骼动画计算从CPU转移到GPU,显著提高了游戏中的角色动画性能。对于那些需要大量3D角色与复杂动画的游戏开发者而言,这是一个非常值得尝试的技术。 Un

    2024年04月25日
    浏览(41)
  • Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

    最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的baker过程种,

    2024年02月04日
    浏览(41)
  • 游戏引擎之高级动画技术

    当我们拥有各类动画素材(clips)时,要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP(同一个clip内不同pose之间),动画融合需要的线性插值是不同clip之间的插值。 以走-跑为例,可以用速度来

    2024年04月14日
    浏览(60)
  • 2022版本unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)

      👨‍💻个人主页:@元宇宙-秩沅 hallo  欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由  秩沅  原创 收录于专栏 unity实战入门  ⭐相关文章⭐ ——————————————————— -[本站最全-unity常用API大全(万字详解),不信你不收藏] -[关于游戏剧情模式中用到的

    2024年02月03日
    浏览(53)
  • 【还在传统绑骨骼动画?】让AI助力你实现2D游戏角色动画流程

    需要的知识 : 会调+chatGpt( 看小红书、抖音、B站、Youtube、Telegrame等等都行,别傻忽忽跑到知识星球被收割了,就是一帮割韭菜的。 )学会怎么结合这两款不同的AI先。 如果你对此文字生成图片嗤之以鼻的话,那还是自己手绘线稿吧。 画手问题的解决方案(我更喜欢

    2024年02月04日
    浏览(31)
  • 游戏中模型动画的几种实现方式

    游戏内动画的实现方式一般有这几种: 骨骼动画 顶点动画 材质动画 CPU蒙皮动画 骨骼动画是一种基于骨骼系统的动画技术,它通过对骨骼进行变换来控制模型的姿态和动作。 在骨骼动画中,模型通常被分解成多个部分,每个部分都与一个或多个骨骼相连,通过对骨骼进行旋

    2024年02月05日
    浏览(42)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包