Unity3D日常开发Unity3D中Animation和Animator动画的播放暂停倒放控制
Posted 恬静的小魔龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D日常开发Unity3D中Animation和Animator动画的播放暂停倒放控制相关的知识,希望对你有一定的参考价值。
推荐阅读
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新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);
五、后记
本篇文章详细讲解了Animation
和Animator
组件的介绍和不同点。
已经使用的方法。
然后介绍了Animation
和Animator
组件播放动画的过程中的播放、倒播、暂停动画的代码分享。
当然,Animation
和Animator
组件的使用不仅仅就这些,更多的高端的使用方法,可以关注其他文章。
如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多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和坑,让后来人可以有些参考。 |
以上是关于Unity3D日常开发Unity3D中Animation和Animator动画的播放暂停倒放控制的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D日常开发Unity3D工具之UnityForSVN
Unity3D日常开发Unity3D中使用反射消灭Switch语句
Unity3D日常开发Unity3D中使用反射消灭Switch语句
Unity3D日常开发Unity3D中Animation和Animator动画的播放暂停倒放控制