【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制_unity 动画倒放-程序员宅基地

技术标签: unity  # Unity3D之日常开发  游戏引擎  动画  # Unity3D之小技巧  

推荐阅读

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

一、前言

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

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

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

二、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之UGUI UGUI Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据 文件读取 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合 数据集合 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发 虚拟仿真 总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件 插件 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发 日常记录 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG 日常记录 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/q764424567/article/details/129516429

智能推荐

7本计算机圣经_计算机程序设计艺术多少本-程序员宅基地

文章浏览阅读7k次,点赞3次,收藏14次。1、《计算机程序设计艺术(第1卷)》《计算机程序设计艺术》系列是公认的计算机科学领域经典之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。一共有3卷,第 1 卷,讲解基本算法;第2卷,全面讲解了半数值算法,分“随机数”和“算术”两章;第3卷,全面讲述了排序和查找算法。豆瓣书评:@Palmer:这也算是需要 一辈子用心来读 的一本书吧!~@P..._计算机程序设计艺术多少本

Python Matplotlib画图-程序员宅基地

文章浏览阅读101次。本次学习内容主要涉及利用一些方法如concat方法进行数据合并以及利用groupby进行分组统计,关于concat等合并方法在《利用Python进行数据分析(第二版)》中已做详细说明,其中的学习注释便不再搬运到此处,至于groupby函数的基本使用,与SQL语句中的groupby类似,不再赘述。本次博文仅贴写一些代码。## 导入基本库import pandas as pdimport numpy as np## 数据加载text = pd.read_csv("data/train-left-

物联卡的套餐类型有哪些_物联卡套餐-程序员宅基地

文章浏览阅读2.1k次。物联网的出现逐渐改变和影响着大家生活的各个方面,物联网是以互联网为基础为智能设备提供通信支撑。在万物互联的大背景下,物质因连接而被赋予生命,但是还有小部分企业对物联网的认识存在简单的概念上。  一、物联卡的应用场景和流量划分  物联卡的应用场景可以划分为三类,分别是小流量应用场景、中流量应用场景、大流量应用场景。  ①小流量应用场景是指单用户量小于10MB,应用场景特征指文本类信息传输、单次使用流量小或每月连接次数少,一次性预付较长费用。适用行业主要有智能抄表、金融POS机、消费电子设备等,  ②_物联卡套餐

PCIe热插拔:通知试热插拔&暴力热插拔_pcie dpc presence detect-程序员宅基地

文章浏览阅读5.9k次,点赞11次,收藏52次。某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。热切换和热插拔的主要区别是应用领域不同,热插拔主要应用于PC以及服务器的主板上的板卡连接,而热切换主要针对的是CPCI(CompactPCI ,一种常用于仪器仪表的接口)应用的。热插拔分为两种,一是通知式热插拔,一个是暴力热插拔,_pcie dpc presence detect

自动化部署脚本_自动部署cmd脚本-程序员宅基地

文章浏览阅读385次。#!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os import subprocess import re import shlex import time filename = sys.argv[0] ABSDIR = os.path.abspath(os.path.dirnam_自动部署cmd脚本

CP-ABE的使用_基于随机森林的cpabe-程序员宅基地

文章浏览阅读9.2k次,点赞8次,收藏36次。参考:http://acsc.cs.utexas.edu/cpabe/tutorial.htmlhttp://acsc.cs.utexas.edu/cpabe/事先先配置好cp-abe:http://www.cnblogs.com/rockorange/p/3757805.html我在ubuntu的主文件夹下面的hmj文件夹下新建了一个文件cp-abe。路径是:/home/_基于随机森林的cpabe

随便推点

Winform中使用FastReport的PictureObject时通过代码设置图片源并使Image图片旋转90度_fastreport 图片旋转-程序员宅基地

文章浏览阅读731次。场景FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100893794Winform中使用FastReport实现简单的自定义PDF导出:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det..._fastreport 图片旋转

原生js实现移动站点头部搜索栏背景色透明度变化,倒计时,轮播图_js标题滚动实现背景图片由透明变实色怎么弄-程序员宅基地

文章浏览阅读1k次。window.onload = function() { searchRgba(); secondKill(); bannerAutoPlay();} //封装首页头部搜索栏在页面向下滚动时,背景颜色从透明,慢慢变深的效果,在超过轮播图时,背景透明度为0.85不变。 function searchRgba() { var topSearch = docu..._js标题滚动实现背景图片由透明变实色怎么弄

Cesium 自定义Primitive - 绘制多边形_cesium 画空间多边形-程序员宅基地

文章浏览阅读689次,点赞10次,收藏9次。利用Cesium自定义Primitive渲染多边形,并实现实时绘制多边形_cesium 画空间多边形

再说MySQL数据库事务隔离级别的那些事(通俗版非学院派)_通俗的讲一下mysql的隔离级别-程序员宅基地

文章浏览阅读517次。MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。要真正理解数据库事务隔离级不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的_通俗的讲一下mysql的隔离级别

16位汇编 loop循环_16位汇编 循环-程序员宅基地

文章浏览阅读1.4k次。loop循环,计算2的8次方assume cs:codesgcodesg segment mov ax,2 mov cx,7 s: add ax,ax loop s mov ax,4c00h int 21Hcodesg endsend_16位汇编 循环

python界面设计工具-wxFormBuilder_vscode wxformbuilder-程序员宅基地

文章浏览阅读7.8k次,点赞7次,收藏69次。一 wxFormBuilder是什么wxFormBuilder是一款可视化的GUI设计工具,界面设计后可以自动生成代码,免去了手工码gui的繁琐,一套界面可支持生成C++\Python\PHP\Lua\XRC等代码形式,可以极大提升python GUI开发效能。项目发布网址:https://github.com/wxFormBuilder/wxFormBuilder/releases..._vscode wxformbuilder