unity怎么将animation动画变慢

unity怎么将animation动画变慢,第1张

在打开Animator动画板之后,选中需要修改的动画。

1、在Inspector板中修改speed值,将speed值调低。Unity组件里面的Animation是可以控制播放速度的,通过调整AnimationState的speed属性即可更改某个动画的速度。

可以在Unity中使用Animator控制器来播放动画,并在动画播放完毕后显示选项。首先,需要创建一个Animator控制器,然后将动画添加到控制器中,并设置动画的触发器。接着,可以使用AnimatorSetTrigger()方法来播放动画,在动画播放完毕后,可以使用AnimatorGetCurrentAnimatorStateInfo()方法来获取当前动画的状态,从而判断动画是否播放完毕,如果播放完毕,就可以显示选项。

上一回我们介绍了 Unity中的2D IK系统 ,这一回我们讲讲如何录制第一个动画——待机动画。

首先打开Unity动画窗口,点击Window——》Animation——》Animation。可以看到下方的时间轴,跟大部分动画制作软件一样,Unity也有一条时间轴。注意这里的Animation窗口和Animator窗口,不要混淆。Animation是制作动画剪辑用的,而Animator是设置动画状态机用的。

创建动画剪辑的时候一定要清楚目前选中的节点,本例中选择的是Player节点,最外层节点。在这个节点上创建Animation,用于控制全身的动作。同时要确保下子节点中没有创建Animation组件。

在d出的对话框中给新创建的动画剪辑命名,待机动画命名为idle_animation。创建Animations目录,保存于Animations目录中,养成分目录的好习惯,便于资产的管理。

录制动画之前,需要将角色中需要录制动画的所有节点的position,rotation全部设置添加到关键帧中。在Hierarchy层级窗口中,我们选择如下图所示的节点,注意选择之前可以按住alt键并点击MBoy左侧的小三角,就可以打开MBoy下所有的子节点。选中第一个节点后按住shift键,再选中最后一个节点就可以全部选中,再按住ctrl键来剔除不需要的节点。其中骨骼端点的空节点都是不需要的,不需要通过这几个点来控制IK点的运动。但是最下方的几个Target必须得加入进去,这几个点是控制IK运动的目标点。

选中节点之后,在Animation窗口中点击录制关键帧按钮,进入录制关键帧模式。

在Inspector检视窗口中找到Position属性,在上面右键单击,d出菜单中选择添加关键帧Add Key,将上一步中选中的所有节点的Position属性全部添加到关键帧中。重复上述步骤将Rotation属性也添加关键帧Add Key。

添加完关键帧后,Potision和Rotation属性分别如图所示。

复制第0帧的所有关键帧,粘贴到第60帧上。点击最上面的菱形即可选中下面所有的关键帧。按ctrl+c进行复制,在第60帧上按ctrl+v进行粘贴。保证第0帧的关键帧与第60帧的关键帧一致,完成了一个60帧的循环。

在第30帧处,选中根骨骼进行向下移动,可以看到时间轴上已经记录了当前的动作,加入了新的关键帧。左右拖动时间轴可以看到动画效果。(unity2019和2021点击动画播放按钮可以正常看到动画,2020点击动画播放按钮看不到动画效果,不知道是不是unity的bug,直接运行项目倒是正常的。)

播放动画查看动画效果,可以反复优化动作。

你需要获取当前animator所处在的动画状态,即使它处于idel状态也应当播放idel动画,你可以获取当前动画控制器处于哪个动画状态,正在播放哪些动画剪辑

Animator anim;

AnimationInfo[] AnimationInfoArr;

void GetCurrentAnimationName()

{

anim=GetComponentAnimator;();

AnimationInfoArr=animGetCurrentAnimationClipState(0);

foreach(AnimationInfo a in AnimationInfoArr)

{

DebugLog( aclipname);

}

}

参考

Unity动画系统详解1:在Unity中如何制作动画?

Unity 动画系统 Animation 和 Animator的小实例

Unity/Animation -- 创建Animation Clip

空场景,找到一张Sprite,拖到面板中,右键添加Animation组件。如下:

选中,点击Unity的 Window->Animation->Animation。注意确认提示中的To begin animation后面的名称,是不是自己要添加的动画目标

这里发现只有Positionz,原因我暂时没搞清楚。而换成3D物体,菜单就是这样的了

这里可以创建另外一个ani

与方式一不同的是,不要先添加Animation组件,直接Window--Animation--Animation,命名保存后,会出现2个文件:

看起来是引擎自动生成了twoImagecontroller控制器,也就是Animator组件,而不是方式一中的Animation组件。创建动画保存后运行,发现动画已经生效了。再创建一个动画twoAni2,然后点击Window--Animation--Animator,来观察Animator视图:

橙色的待机动画是初始状态,其他状态都需要从这里出发,也都能回到这里。每个灰色矩形的状态表示一种动画,箭头连线表示状态切换方向。(关于状态机,后面还会详细说。)

使用Make Transition可以将twoAni2也连接上,这样播完twoAni1后,会播放twoAni2。在这个面板上,双击twoAni1或twoAni2,也可以直接 进入动画编辑窗口。默认的twoAni2一直在循环播放,可以在资源管理窗口找到它,然后把Loop time勾掉

参考

Unity 动画系统 Animation 和 Animator 联系与区别

在unity的老版本中我们只有Animation组件,在46版本以后则增添了Animator组件,如果只是控制一个动画的播放我们则用Animaton组件,如果是很多动画之间相互转换则使用Animator组件,它们两者的区别就是Animator有一个动画控制器(俗称动画状态机),使用它来进行动画切换是非常方便的,但缺点是占用内存比Animaton组件大。

要注意的是Animator Controller和Animation Clip都是文件(File),Animator则是GameObject上的一个组件(Component),不能混为一谈。

Animation窗口有两种模式:录制模式和预览模式。

点击录制按钮后,就进入了录制状态。此时关键帧部分会变成红色。

在录制模式下,不管是在场景中移动、旋转、缩放物体,还是在Inspector面板中修改物体组件的属性(Unity动画支持的属性),Unity都会自动在动画Clip的当前时间上添加关键帧保存。

我们可以在Animation窗口中拖到自己想添加关键帧的地方,然后回到scene场景中修改物体的属性,反复重复这样的步骤,然后退出录制状态,就自动生成想要的动画了。

如果没有在录制模式下,对物体的修改不会自动记录到动画Clip中。如果需要记录,需要手动添加关键帧进行记录。

如果在Inspector中修改了物体的属性,物体的属性会从浅蓝色背景变为浅红色,代表该属性已经被修改。这时候你可以右键点击对应的属性,在d出菜单中点击Add Key即可添加关键帧,将该属性的数据保存到动画Clip中。如果你在当前帧修改了多个属性,可以点击菜单中的Key All Modified(将所有修改的属性记录关键帧)或Key All Animated(记录属性列表中所有属性的数值,即使与上一帧相同数值的属性也会被记录)来一次性将所有修改的属性保存。

也可以点击Animation窗口左侧的Add Keyframe按钮来记录当前属性列表中选中属性的关键帧,如果当前没有选中任何属性,则会记录所有属性。

默认情况下,Animation窗口是DopeSheet模式,显示的是关键帧的点。如果想只使用Dopesheet实现比较好的动画效果还是比较困难的,因为它并不能直观地反映参数随时间变化的函数。这时我们可以在Animation窗口左下角切换到Curves视图, 具体效果如下图

如图,这是一个很简单的Rotation动画,只有X在第43帧变为75634。

将鼠标移到紫色点处,会变成可以移动的四角形,可以直接调节动画效果:

此时返回dopesheet视图,发现关键帧和数值都被改变了

编辑关键帧时,可以多选(在Curve编辑中同理):

你会发现直接拖拽多个关键帧时,后方的关键帧并不会跟随这些关键帧移动。如果你想让后方的关键帧也跟着移动,可以按住R键,同时拖拽这些关键帧。这种编辑方式叫做Ripple Edit(在音视频编辑软件中很常见)。缩放同理。

点击属性视图中Position属性左侧的三角标识,可以展开显示Positionx, Positiony, Positionz的属性。现在选中绿色的那个,去控制y属性。

如果模拟上下跳动的效果,我们可以在动画所有采样点的中点处设置一个Key,表示d跳的最高点。先在0:30处鼠标右键Add key添加一个关键点,然后鼠标左键按住并沿Y轴拖拽来改变该点的Positiony的值。

如下图,添加了两个key,并且Positiony设置为1,中间一段一直为1,多一点跳到高处的滞留时间。

将两侧都改为Linear后,变成了这样,注意那个勾从Clamped Auto变成Broken

在Curves中预定义了五种不同的Key点切线类型,它们分别是:

Evnet事件帧会在游戏运行时,场景中的物体在Animator的控制下,播放该动画片段到对应位置时,触发该物体上的某个脚本中的一个可以作为AnimationEvent挂载的方法

给触发动画的物体挂个脚本后,在事件帧上就能选方法了

参考

unity动画之帧动画使用

这时会提醒你保存一个动画,保存在Assets中/effect/explosionSmoke中,命名为explosionSmoke,保存动画即可 。

可以根据需要,调整Samples值。这样,帧动画就实现了。

可以参考 Unity UGUI系列二 SpriteRenderer和Image

通过观察,上面步骤做出的动画是拖到场景里,使用SpriteRenderer完成的。如果我们想在Canvas下,使用Image制作也是可以的。

显示当前时间的时钟

为游戏对象创建层级关系

编写脚本并与对象关联

使用命名空间

使用方法更新游戏物体

按时间进行旋转

在此教程中我们编写一个简单的C#脚本来制作时钟指针动画。

要求大家已经对Unity的编辑器有了基本的了解,其实,只需用过Unity几分钟就可以开始该案例了。

很快我们就能完成以下成果。

制作时钟

不用任何Unity资源包,我们从0开始创建Unity工程。缺省的场景中有一个位于 (0, 1, -10), 朝着z轴的负方向的摄像机,为了使摄像机中显示的透视图与场景一致,选择摄像机,并在菜单中选择执行 GameObject / Align View将摄像机与当前场景对齐。

啥是 游戏物体

子物体又是哈东东?

我们就简单用立方体来制作时钟的指针,为每个指针使用 GameObject/ Create Other / Cube 创建立方体。对于时针,设置其位置为 (0, 1, 0) ,三个轴上的缩放分别为 (05, 2, 05) ,对分针位置为 (0, 15, 0) ,缩放 (025, 3, 025) ,秒针的则分别是: (0, 2, 0)

(01,4, 01)。

创建的时钟,以及其中游戏物体间的层级关系。

制作时钟指针动画

要让时钟动起来,就得写点脚本了。在工程视图中右键,选择 Create/ C# Script 新建一个C#脚本,将其命名为 ClockAnimator。 双击打开之,将其中内容清空,从空文件开始。

首先,我们要引用Unity的命名空间,接着就是定义 ClockAnimator 类。将其定义为一个公开的类,继承自[MonoBehaviour]

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]

}

神马是命名空间?

类又是啥?

关于[MonoBehaviour]类?

这样我们就创建了一个可以作为组件的最小的类。保存之,接着从 Project 窗口中把它直接拖放到 Hierarchy (层级)视图的 Clock 游戏物体上,建立其与该游戏对象的关联。当然,也可以使用 Clock 游戏物体的 Add Component 按钮。

将ClockAnimator与Clock关联

要让指针动起来,我们得使用指针组件的 Transform 对象。首先,在刚才的脚本中为每个指针添加一个 Transform 变量,并保存它。这样,这些公开变量就成为可在编辑器中被赋值的组件属性,编辑器会获得这些游戏物体的 Transform 组件,并将它们赋予这些变量,选择 Clock ,将指针对应的游戏物体赋给这些属性。

变量是什么?

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]{

}

为空的ClockAnimator属性和填写属性后的ClockAnimator

下面在脚本中添加一个update方法。这是一个特殊的方法,它会在每一帧播放时调用,我们在这个方法中实现时钟指针的旋转。

using UnityEngine;

public class ClockAnimator : [MonoBehaviour]{

}

}

方法是啥?

[ Update ] 方法是否应当公开?

保存脚本,编辑器会提示组件中已经有了update方法,并在脚本组件的左侧出现一个复选框,这样我们就能禁用该脚本组件了,当然此时,还是要保持它处于可用状态。

ClockAnimator更新的显示了复选框

每个小时,时针要转动360/12度;分钟指针则是每分钟转动360/60度;而秒针是每秒旋转360/60度。为了程序中使用方便,我们把这些值定义为私有的浮点常量。

using UnityEngine;

public class ClockAnimator : [MonoBehaviour] {

}

常量有什么特殊性?

为了让时钟转动起来,每次update时,我们先得到当前系统的时间。System命名空间中的[DateTime] 结构体 可以用来存储时间,而该结构体中的静态属性Now可以返回当前时间,这样,每次update时,我们就先得到该值并将其存储到一个临时变量中。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour]{

}

什么是结构体?

属性又是什么?

要让指针转动,就需要更新指针的旋转,而这可以通过设置指针的localRotation实现。使用四元数:[Quaternion]可以定义任意角度的旋转。

因为摄像机朝向是z轴,Unity使用的是左手坐标系统,因此指针应该是绕着Z轴负方向进行旋转。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

时间显示为12:44

四元数quaternion是什么?

旋转又是啥?

改进时钟的实现

很好!在游戏的运行模式中,时钟已经可以显示当前的时间了,但是使用离散的时间值让它看起来更像是一个电子钟。下面增加一个选项,实现模拟时间显示。在脚本中添加一个公开的布尔变量 analog ,用它来决定update方法中的显示方式,这样我们就能在编辑器中直接控制时钟的显示方式了,即使是在游戏运行时。

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

添加了analog模式的ClockAnimator

对于模拟现实显示的选项,我们使用和之前稍稍不同的方式。这次不用[DateTime]Now,我们用[DateTime]NowTimeOfDay,这是一个时间段[TimeSpan]。返回的是自每天午夜开始到现在已经经过的小时,分钟和秒数。由于这个值是双精度数,使用时我们需要将它们转换为float类型。

类型转换的意思是

using UnityEngine;

using System;

public class ClockAnimator : [MonoBehaviour] {

}

按照模拟方式显示的时钟

现在时钟也可以按模拟方式显示了。

unitypackage PDF

原文链接:

>

以上就是关于unity怎么将animation动画变慢全部的内容,包括:unity怎么将animation动画变慢、unity播完动画出现选项、Unity 2D Animation——3.待机动画录制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9667516.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存