相关文章推荐

大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。

这篇文章就总结一下, Animation Animator 动画播放系统的控制 播放、暂停、倒放 的代码。

首先,来了解一下 Animation Animator 的区别和联系。

二、Animation和Animator的区别和联系

2-1、Animation动画播放器

在这里插入图片描述
Animation动画播放器 ,用来控制单一动画的播放和停止,占用资源小。

属性 简介
Animation 当前播放的动画
Animations 所有可以播放的动画片段,可以通过切换动画片段来切换动画
Play Automatically 自动播放
Animate Physics 动画是否和物理世界进行交互(可以研究一下)
Culling Type 动画在不可见时是否继续播放,默认总是播放

2-2、Animator动画状态机

在这里插入图片描述
Animator动画控制器 ,用来控制多个动画的播放、切换及叠加系列复杂的效果,动画状态机,占用资源大。

属性 简介
Controller 动画控制器
Avatar 物体的骨骼Avatar
Apply Root Motion 是否使用动画本身来控制角色的位置(不然就是使用脚本来控制角色的位置)
Update Mode 动画的更新模式,默认是同步更新,动画速度与运行速度相匹配,运行速度慢,动画慢
Culling Mode 动画在不可见时是否继续播放,默认总是播放

2-3、区别与联系

Animation组件和Animator组件的使用是非常相似的。

Animation组件用来控制单一动画的播放控制,Animator控制多个动画之间的切换,用了状态机机制。

Animation占用资源少,Animator占用资源多。

Animator增加了骨骼Avatar,可以控制骨骼动画:
在这里插入图片描述

三、Animation中控制动画播放、暂停、倒放

3-1、播放动画

根据动画片段的名字播放动画:

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    Animation ani;
    void Start()
        //播放动画
        ani.Play("Open");

设置动画片段来播放动画:

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    Animation ani;
    public AnimationClip[] clips;
    void Start()
        //使用动画片段来播放动画
        ani.clip = clips[0];
        ani.Play();

将动画片段拖进去:
在这里插入图片描述

AnimationClip:动画剪辑片段,储存基于关键帧的动画,是用于Animation来播放动画

3-2、暂停动画

使用了三种方法

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    Animation ani;
    Animator anir;
    void Start()
        // 播放动画
        ani.Play("Open");
        // 暂停动画
        // 第一种方法:
        ani.Stop();
        // 第二种方法:
        AnimationState animationState = ani["Open"];
        animationState.speed = 0;
        //第三种方法
        Time.timeScale = 0;

3-3、倒放动画

关键点在于设置AnimationState动画状态播放速度为负值即可倒放,负多少无所谓:

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    Animation ani;
    void Start()
        // 倒放动画
        AnimationState animationState = ani["Open"];
        animationState.speed = -1;//设置速度为负值即可
        animationState.normalizedTime = 1;
        ani.Play("Open");
 

AnimationState:动画状态,用来改变单一动画的播放速度、权重、时间、层级、播放Mode,以及混合模式

四、Animator中控制动画播放、暂停、倒放

4-1、旧版Unity的API实现播放、暂停、倒放

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    public Animator ani;
    void Start()
    void Update()
        if (Input.GetKeyDown(KeyCode.W))
            // 暂停动画
            ani.speed = 0;
        if (Input.GetKeyDown(KeyCode.S))
            // 倒播
            // 现在speed设置为负数无效
            ani.speed = -1;
        if (Input.GetKeyDown(KeyCode.D))
            // 播放动画
            ani.speed = 1;

目前,播放和暂停是有用的,但是倒放不管用。
接下来,看一下新版Unity如何实现Animator动画的倒放吧。

4-2、新版Unity的API实现播放、暂停、倒放

第一种方法,复制一份动画片段
在这里插入图片描述
代码控制:

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    public Animator ani;
    void Start()
        // 正常播放
        ani.Play("textAni");
        // 倒放
        ani.Play("textAni-1");

第二种方法,用状态机控制

(1)新建变量float类型:
在这里插入图片描述
(2)命名为speed:
在这里插入图片描述
(3)勾选Parameter参数
在这里插入图片描述
(4)代码控制

using UnityEngine;
public class AnimationPlayControl : MonoBehaviour
    public Animator ani;
    void Start()
    void Update()
        if (Input.GetKeyDown(KeyCode.W))
            // 暂停动画
            ani.SetFloat("speed",0);
        if (Input.GetKeyDown(KeyCode.S))
            // 倒播
            ani.SetFloat("speed", -1);
        if (Input.GetKeyDown(KeyCode.D))
            // 播放动画
            ani.SetFloat("speed", 1);

本篇文章详细讲解了AnimationAnimator组件的介绍和不同点。

已经使用的方法。

然后介绍了AnimationAnimator组件播放动画的过程中的播放、倒播、暂停动画的代码分享。

当然,AnimationAnimator组件的使用不仅仅就这些,更多的高端的使用方法,可以关注其他文章。

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。

你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏方向简介
Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。这篇文章就总结一下,Animation和Animator动画播放系统的控制播放、暂停、倒放的代码。首先,来了解一下Animation和Animator的区别和联系。
该方法需要配合Unity的Animator的Transition来完成 在这个例子,我是通过 继承了StateMachineBehaviour的类的OnStateEnter方法完成的 首先在Unity的Animator目标Animation,出现如下图所示的变量,按照红框内标记的内容勾选并填入 写入后,在需要设置成为倒放的地方添加animator.SetFloat(“Pla...
/// 正播放动画 /// </summary> private void PlayCarAnimator(Animator anim,string animName) anim.SetFloat("isDoor", 1f); if (anim.GetCurrentAnimatorStateIn
Unity有两个动画系统,Animation和Animator,它们两个虽然都是关于动画播放的组件,但它们之间有很多的不同点。Animation是老版本就存在的动画系统组件,但Animatorunity4.6版本之后才拥有的组件;控制一个动画播放一般都使用Animation控制多个动画播放一般使用Animator,因为Animator 有一个动画控制器,俗称动画状态机,用于切换动画非常的方便;Animator 缺点就是占用内存比Animation大。
本节我们来介绍Unity动画系统以及管理动画剪辑(Animation Clip)的组件AnimatorUnity动画系统又称为Mecanim,是一个基于动画剪辑(AnimationClip)的系统。在此系统,我们可以通过对游戏对象的一系列属性进行操作从而制作关键帧,进而制作动画。 同时,由于Unity动画是基于游戏对象(GameObject)的,动画-本节相关内容请读者参考:-Animator 窗口 - Unity 手册,《Animator窗口》 AnimatorUnity分别可以指一个
Unity 动画控制器1每个Animator Controller都会自带三个状态:Any State, Entry和 Exit。1、Any State状态2、Entry状态3、Exit状态2动画状态的属性1我们可以选某个自定义状态,并在Inspector窗口下观察它具有的属性2添加状态控制参数3非常常用的脚本1刚进入动画的时候调用2退出动画的时候调用3动作运行的时候调用4清空累计的信号5以上脚本使用方法 Animator Cintroller的三个状态,以及动画状态的属性原创在这里 首先我们得新建一个动
一键将角色的AnimatorAnimation去掉,将SkinnedMeshRender更换为一般的Mesh Render,完成将动画效果的实现从CPU转移到GPU运算的目的,来利用GPU Instancing技术减少Draw Call。 • Convert assets quickly and easily using the converter. • Out of the box GPU Instancing Support! • Can be controlled using Mecanim, no need to re-write existing code or controllers, just attach a script. • Supports custom animation events. • Built with performance in mind, minimal CPU overhead. • Includes full source code.
unity可以用两种方式控制动画 1 Animations,这种方式简单,直接 Play(“Idle”) 或者 CorssFade(“Idle”) 就可以播放动画 2 Animator,5.x之后推荐使用这种方式,因为里面可以加上混合动画,让动画切换更加平滑 添加状态控制参数 编辑切换状态的条件 点击连线,添加条件,这个条件只会显示刚才添加的状态控制参数 AnimState,设置等于0是...
要在Unity通过按钮控制动画播放暂停倒放,可以使用以下步骤: 1. 创建一个UI按钮,将其命名为“PlayButton”,并将其放置在场景的适当位置。 2. 在Unity的“动画”窗口,选择要控制动画剪辑。 3. 在“动画”窗口,单击“Create Empty”按钮,创建一个空的Animation Controller。 4. 将Animation Controller拖放到场景的任何对象上,例如主摄像机。 5. 在Animation Controller,单击“Create State”按钮,创建一个新的动画状态。 6. 将动画剪辑拖放到新创建的动画状态。 7. 在Animation Controller,添加三个新的参数:Play、Pause和Rewind。这些参数应该是布尔类型。 8. 在Animation Controller,创建三个新的转换,分别从“Any State”到“Play”、“Pause”和“Rewind”。 9. 对于每个转换,设置相应的条件。例如,对于“Play”转换,条件应该是“PlayButton被按下”。 10. 在场景选择按钮,添加一个新的脚本,并将以下代码添加到脚本: using UnityEngine; using System.Collections; public class ButtonController : MonoBehaviour { public Animator animator; public void PlayAnimation () { animator.SetBool("Play", true); animator.SetBool("Pause", false); animator.SetBool("Rewind", false); public void PauseAnimation () { animator.SetBool("Play", false); animator.SetBool("Pause", true); animator.SetBool("Rewind", false); public void RewindAnimation () { animator.SetBool("Play", false); animator.SetBool("Pause", false); animator.SetBool("Rewind", true); 11. 在按钮组件将“PlayAnimation”、“PauseAnimation”和“RewindAnimation”方法分别分配给OnClick事件。 现在,当您单击“PlayButton”时,动画将开始播放。当您单击“暂停”按钮时,动画暂停。当您单击“倒放”按钮时,动画倒放
 
推荐文章