技术标签: unity # Unity3D之日常开发 游戏引擎 动画 # Unity3D之小技巧
推荐阅读
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
在日常开发中,常常会遇到要控制动画的播放、暂停和倒放的情况。
这篇文章就总结一下,Animation
和Animator
动画播放系统的控制播放、暂停、倒放
的代码。
首先,来了解一下Animation
和Animator
的区别和联系。
Animation动画播放器
,用来控制单一动画的播放和停止,占用资源小。
属性 | 简介 |
---|---|
Animation | 当前播放的动画 |
Animations | 所有可以播放的动画片段,可以通过切换动画片段来切换动画 |
Play Automatically | 自动播放 |
Animate Physics | 动画是否和物理世界进行交互(可以研究一下) |
Culling Type | 动画在不可见时是否继续播放,默认总是播放 |
Animator动画控制器
,用来控制多个动画的播放、切换及叠加系列复杂的效果,动画状态机,占用资源大。
属性 | 简介 |
---|---|
Controller | 动画控制器 |
Avatar | 物体的骨骼Avatar |
Apply Root Motion | 是否使用动画本身来控制角色的位置(不然就是使用脚本来控制角色的位置) |
Update Mode | 动画的更新模式,默认是同步更新,动画速度与运行速度相匹配,运行速度慢,动画慢 |
Culling Mode | 动画在不可见时是否继续播放,默认总是播放 |
Animation组件和Animator组件的使用是非常相似的。
Animation组件用来控制单一动画的播放控制,Animator控制多个动画之间的切换,用了状态机机制。
Animation占用资源少,Animator占用资源多。
Animator增加了骨骼Avatar,可以控制骨骼动画:
根据动画片段的名字播放动画:
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来播放动画
使用了三种方法
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;
}
}
关键点在于设置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,以及混合模式
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动画的倒放吧。
第一种方法,复制一份动画片段
代码控制:
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和坑,让后来人可以有些参考。 |
文章浏览阅读7k次,点赞3次,收藏14次。1、《计算机程序设计艺术(第1卷)》《计算机程序设计艺术》系列是公认的计算机科学领域经典之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。一共有3卷,第 1 卷,讲解基本算法;第2卷,全面讲解了半数值算法,分“随机数”和“算术”两章;第3卷,全面讲述了排序和查找算法。豆瓣书评:@Palmer:这也算是需要 一辈子用心来读 的一本书吧!~@P..._计算机程序设计艺术多少本
文章浏览阅读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机、消费电子设备等, ②_物联卡套餐
文章浏览阅读5.9k次,点赞11次,收藏52次。某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。热切换和热插拔的主要区别是应用领域不同,热插拔主要应用于PC以及服务器的主板上的板卡连接,而热切换主要针对的是CPCI(CompactPCI ,一种常用于仪器仪表的接口)应用的。热插拔分为两种,一是通知式热插拔,一个是暴力热插拔,_pcie dpc presence detect
文章浏览阅读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脚本
文章浏览阅读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
文章浏览阅读731次。场景FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100893794Winform中使用FastReport实现简单的自定义PDF导出:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det..._fastreport 图片旋转
文章浏览阅读1k次。window.onload = function() { searchRgba(); secondKill(); bannerAutoPlay();} //封装首页头部搜索栏在页面向下滚动时,背景颜色从透明,慢慢变深的效果,在超过轮播图时,背景透明度为0.85不变。 function searchRgba() { var topSearch = docu..._js标题滚动实现背景图片由透明变实色怎么弄
文章浏览阅读689次,点赞10次,收藏9次。利用Cesium自定义Primitive渲染多边形,并实现实时绘制多边形_cesium 画空间多边形
文章浏览阅读517次。MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。要真正理解数据库事务隔离级不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的_通俗的讲一下mysql的隔离级别
文章浏览阅读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位汇编 循环
文章浏览阅读7.8k次,点赞7次,收藏69次。一 wxFormBuilder是什么wxFormBuilder是一款可视化的GUI设计工具,界面设计后可以自动生成代码,免去了手工码gui的繁琐,一套界面可支持生成C++\Python\PHP\Lua\XRC等代码形式,可以极大提升python GUI开发效能。项目发布网址:https://github.com/wxFormBuilder/wxFormBuilder/releases..._vscode wxformbuilder