Unity动画系统学习

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

Unity动画系统学习



AnimationState 动画状态

动画状态是动画状态机的基本构建块。每个状态都包含一个动画序列(或混合树),当角色处于该状态时播放该动画序列。

unity 动画过渡,Unity,unity,动画
Motion:分配给此状态的动画剪辑或者动画融合树。
Speed:动画的默认速度。
Multiplier:控制速度的乘数,如果要使用需要勾选Parameter选中,配合float类型参数。
Motion Time:运动的时间,如果要使用需要勾选Parameter选中,配合float类型参数。
Mirror:是否为状态生成镜像,仅适用于人形动画,如果要配合参数使用选中旁边的Parameter关联参数,参数是bool类型。
Cycle Offset:循环偏移时间。如果要配合参数使用,选中旁边的Parameter关联参数,参数是float类型。
上述Parameter参数可以通过代码修值

Foot IK:是否遵循Foot IK,适用于人形动画。

Write Defaults:AnimatorStates 是否为其运动执行未动画化的属性写回默认值。通俗来说勾选WriteDefault会让Clip中,不涉及的节点被置于Default状态,不勾选会让不涉及节点保持之前的更改。

Transitions
Solo:勾选时,该State只能进行该过渡,其它过渡将无效
Mute:勾选时,这个过渡将无效(两个都勾选Mute优先生效)
这个功能通常被用于调试,进行一些单向的过渡,或禁止向某个状态进行过渡,从而在限制性的范围内,观测状态机的运行。

Animation Transitions 动画过渡

动画过渡允许状态机从一个动画状态切换或混合到另一动画状态。过渡不仅定义状态之间的混合应该耗费多长时间,而且还定义它们应该在什么条件下激活。
在任何给定时间只能有一个激活的过渡。但是,当前激活的过渡可能会被另一个过渡中断(如果已将设置配置为允许此行为)
unity 动画过渡,Unity,unity,动画
Has Exit Time:是否有退出时间,如果勾选,当切换动画时,动画一定是播放到下方的Exit Time(百分比)的时间时才过渡到下一个动画。
Exit Time:退出时间,当选择上方的Has Exit Time时,该值决定了过渡生效的确切时间。该值可以大于1,如果小于1,比如0.85,表示当动画播放到了85%的动画时,就会过渡。如果大于1,比如4.5,那么动画将循环4.5次后过渡到下一个动画。
Fixed Duration:选中后,下方的Trnaition Duration过渡持续时间将以秒为单位解读过渡时间,如果不选中,则以百分比解读过渡时间。
Transition Duration(s/%):过渡持续时间,相当于从该状态切换到下一状态的过渡动画持续的时间,对应下方两个蓝色箭头包裹区域。
Transition Offset:过渡到目标状态的起始播放的时间偏移。如果是0则从目标状态开头开始播放,如果是0.5则从目标状态的一半开始播放,可以理解为切入下一个状态的切入点。
Interruption Source:中断过渡
允许该过渡被来自CurrentState或NextState的其它过渡打断,被CurrentState打断则发生了“跳转”,NextState的指向被改变(例如受击打断了攻击)。
被NextState打断则发生了“跃进”,动画迅速的完成了两个状态的过渡(例如从站立状态快速过渡到冲刺斩,奔跑状态被越过)
None:不在添加任何过渡。
Current State:允许被CurrentState出发的过渡。
Next State:允许被NextState出发的过渡打断。
Current State Then Next State:从CurrentState或NextState出发的过渡均可打断,但CurrentState出发的过渡打断优先于NextState出发的过渡。
Next State Thne Current State:NextState出发的过渡打断优先于CurrentState出发的过渡。
Ordered Interruption:针对CurrentState出发的过渡,是否只允许比当前过渡优先级高的过渡打断该过渡。
Conditions:一个过渡可以具有单个或多个条件。如果过渡没有条件,Unity Editor 只会考虑 Exit Time,并在达到退出时间时发生过渡。如果过渡有一个或多个条件,则必须满足所有条件才能触发过渡。

从AnyState状态出发的过渡有两个额外属性:
Can Transition To self:是否可以过渡到自己。
Preview source state:预览各种过渡状态,可以查看从任意状态切换到当前状态的过渡效果。
过渡图:要手动调整以下列出的设置,可直接在字段中输入数字或使用过渡图。在操作视图元素时,过渡图会修改上述值。
unity 动画过渡,Unity,unity,动画

动画分层和遮罩

使用动画分层和遮罩可以达到:通过上下半身播放不同的动画就可以达到动画的组合播放以及两套不同层动作的切换等功能。
注意:结合遮罩使用时默认状态一般为Null状态。
unity 动画过渡,Unity,unity,动画
Weight:权重,当动画同时播放时,如果选择的是叠加状态,会根据权重决定叠加的比例。
Mask:动画遮罩,该层动画全部都会受该遮罩的影响。
Blending:混合方式
Override:覆盖方式,播放该层动画时忽略其他层信息。
Additive:叠加方式,会和其它层动画叠加播放。
Sync:是否同步其它层
主要用于直接从另一个层复制状态过来,在该层中进行修改,适用于比如正常状态下有待机走路跑步等等动作,但是受伤状态下动作会改变,可以利用同步层方便我们进行编辑。选择后会多一个Source Layer表示你要复制哪一层的状态。
Timing:当选中Sync同步其它层时,该参数激活选中,会采用折中方案调整同步层上的动画时长(基于权重计算)不选中,动画时长将使用原始层做为母版。
IK Pass:开启IK通道

动画混合

1D混合

用一个参数去控制动画过渡混合。
unity 动画过渡,Unity,unity,动画
Parameter:用于控制混合的参数,在参数列表中的参数,float类型。
蓝色图像:可以在这里控制n个动画的阈值。
Motion:关联的动画列表,可以用鼠标改变顺序。
Threshold:对应动作的临界阈值 当等于这个值时动作权重最大(完全播放该动作)
取消勾选Automate Thresholds后,这个值可以完全自由控制,数值范围不定。
Compute Thresholds:计算阈值的方式
会从动画剪辑的根运动中获取数据
Speed:速度
Velocity X、Y、Z:xyz上的分速度
Angular Speed(Rad 、Deg):角度或者弧度表示的角速度
举例:
比如你的动画剪辑行走动画时Speed速度是1.5个单位每秒
慢跑是2.3个单位每秒,快跑是4个单位每秒,阈值就会根据这些值来进行设置进行混合。
A图标:动画播放速度
B图标:是否镜像
Adjust Time Scale:调整时间刻度
Homogeneous Speed:均匀速度
Reset Time Scale:重置时间刻度

2D混合

简单理解是用两个参数控制动画的混合。

2D混合的种类
1)2D Simple Directional :2D简单定向模式 运动表示不同方向时使用 比如向前、后、左、右走
2)2D Freeform Directional :2D自由形式定向模式 同上 运动表示不同方向时使用 但是可以在同一方向上有多个运动 比如向前跑和走
3)2D Freeform Cartesian 2D自由形式笛卡尔坐标模式 运动不表示不同方向时使用 比如向前走不拐弯 向前跑不拐弯 向前走右转 向前跑右转
4)Direct 直接模式 自由控制每个节点权重,一般做表情动作等。

动画子状态机

在Animator窗口中右键可以创建动画子状态机。

IK反向动力学

IK在游戏开发中的应用
1.拾取某一件物品
2.持枪或持弓箭瞄准某一个对象 等等
使用的时候需要在Layer中开启IK通道。

    private void OnAnimatorIK(int layerIndex)
    {
        //头部IK相关
        //weight:LookAt全局权重0~1
        //bodyWeight:LookAt时身体的权重0~1
        //headWeight:LookAt时头部的权重0~1
        //eyesWeight:LookAt时眼镜的权重0~1
        //clampWeight:0表示角色运动时不受限制,1表示角色完全固定无法执行LookAt,0.5表示只能够移动范围的一半
        animator.SetLookAtWeight(1, 1f, 1f, 1f, 0f);
        animator.SetLookAtPosition(pos.position);

        animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1);
        animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
        animator.SetIKPosition(AvatarIKGoal.RightFoot, pos2.position);
        animator.SetIKRotation(AvatarIKGoal.RightFoot, pos2.rotation);
    }

MatchTarget位置匹配

通过MatchTarget我们可以在人物执行某些与场景互动的特殊动作过程中(翻越,攀爬)将人物身体的某个部分逐渐匹配到某点的位置和朝向上,在进行匹配的过程中人物的身体位置和方位会发生改变,从而实现人物与场景的真实互动效果。

animator.MatchTarget(matchPosition, matchRotation, AvatarTarget, MatchTargetWeightMask,startNormalizedTime,targetNormalizedTime);

StateMachineBehaviour 状态机行为脚本

	OnStateEnter 	进入状态时,第一个Update中调用
    OnStateExit     退出状态时,最后一个Update中调用
    OnStateIK       OnAnimatorIK后调用
    OnStateMove     OnAnimatorMove后调用
    OnStateUpdate   除第一帧和最后一帧,每个Update上调用
    OnStateMachineEnter     子状态机进入时调用,第一个Update中调用
    OnStateMachineExit      子状态机退出时调用,最后一个Update中调用

动画状态机复用

1.在Project窗口右键Create->Animator Override Controller
2.为Animator Override Controller文件在Inspector窗口关联基础的Animator Controller文件
3.关联需要的动画文章来源地址https://www.toymoban.com/news/detail-752642.html

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

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

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

相关文章

  • 【Unity游戏开发】动画系统(三)按钮动画

    动画系统是一个比较重要的系统,因为我们做游戏是离不开这个东西的,但是我们又不用自己做动画,而动画系统就是管理美工做的动画,我们加以修饰,使之适配我们的游戏 而按钮动画也是一个点,当然重不重要其实还是你说了算,而按钮动画适配我们的2D和3D游戏 用于

    2024年02月09日
    浏览(52)
  • 【Unity 学习笔记】动画组件和动画控制器

    动画是一款游戏不可缺少的一部分。在Unity中,我们可以直接使用Unity自带的动画系统来制作我们想要的动画,其操作相当便捷。 帧动画是2D像素游戏的主流,我将以帧动画为例记录我最近学习动画系统的一些收获。 Unity的动画系统有三个不可缺少的部分。第一,动画;第二,

    2024年02月07日
    浏览(69)
  • Unity 动画系统

    动画系统包含: 动画片段 Animation Clip,记录物体变化的信息,可以是角色的闪转腾挪,也可以是一扇门的开闭 动画状态机 Animator Controller,根据设置切换动画片段 动画组件 Animator,Animation 替身 Avatar,对人形动画进行复用 把一个 .anim 的动画文件作为文本打开 里面有个path属

    2024年02月04日
    浏览(29)
  • Unity 动画系统基本概念

    在古代,一幅字画叫一帧,而在计算机中,每次渲染完毕一幅画面并显示出来,这一幅画就是一帧。 连续切换的帧就形成了动态的画面。每秒刷新帧的次数称为频率,单位是FPS(Frames Per Second,帧/秒),也可以简称为\\\"帧\\\"。传统电影每秒显示24帧就可以保证良好的动态效果。

    2024年02月06日
    浏览(38)
  • Unity老动画系统Animation

    1、创建老动画系统 给要制作动画的GameObeject添加Animation组件 2、Animation参数 Animation:默认播放的动画 Animations:该动画组件可以控制的所有动画 Play AutoMatically:是否一开始就自动播放默认动画 Animate Physics:动画是否与物理交互 Culling Type:决定什么时候不播放动画     Alwa

    2024年02月06日
    浏览(40)
  • Unity中动画系统的性能优化

    降低骨骼数,减少面片数。 方法: 1.勾选Optimize Game Objects,以剔除骨骼节点对应的Transform节点 2.开启多线程渲染选项 主要影响的函数调用开销,可以在profiler中查看: Animators.Update MeshSkinning.Update Camera.Render 注意: 1.其中Animators.Update函数在骨骼节点优化后,场景内放一百个模

    2024年02月11日
    浏览(38)
  • Unity 3D 人形角色动画(Avatar)||Unity 3D 导航系统||Unity 3D 障碍物

    Mecanim 动画系统 适合人形角色动画的制作,人形骨架是在游戏中普遍采用的一种骨架结构。。 由于人形骨架在骨骼结构上的相似性,用户可以将动画效果从一个人形骨架映射到另一个人形骨架,从而实现动画重定向功能。 除了极少数情况之外,人物模型均具有相同的基本结

    2024年01月16日
    浏览(47)
  • Unity学习笔记---2D光照渲染、美术、动画

    Unity 提供三个渲染管线 :一个内置渲染管线和两个可编程渲染管线 (SRP)。两个 SRP 为通用渲染管线 (URP) 和高清渲染管线 (HDRP)。URP 适用于所有平台,而 HDRP 则 旨在用于针对高端 PC 和主机的游戏。 注意 :如果在 Unity 2021 或更高版本中启动一个新项目,则称为 2D (U

    2024年02月09日
    浏览(41)
  • Unity学习-逐帧图集动画制作

    首先在文件部分创建一个Sprite Library Asset 然后点击创建出来的文件 点下面的加号添加对应的图 添加完成之后点一下Apply 然后新建一个物体 添加这三个组件 其中SpriteLibrary里面 把你刚刚创建的图集文件拉过来 Sprite Resolver选择对应的动作和图片 然后开始制作动画 Animation创建一

    2024年01月23日
    浏览(36)
  • Unity新动画系统之动画状态机Animator Controller

    1、创建动画状态机文件 (1)会在创建动画时自动创建 (2)Create----Animator Controller 2、动画状态机窗口相关 层级:可以在右侧齿轮设置参数大小   3、添加动画 为对象添加动画后会自动添加到状态机中 4、状态切换 动画会在1和2之间不断切换  添加条件 点击转换箭头  在这

    2024年02月05日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包