Unity Animation、Animator 的使用
文章目录
- 1. 添加动画
- 2. Animation
- 2.1 制作界面
- 2.2 制作好的 Animation 动画
- 2.3 添加和使用事件
- 3. Animator
- 3.1 制作界面
- 3.2 一些参数解释
- 3.3 动画参数
- 4. Animator中相关类、属性、API
- 4.1 类
- 4.2 属性
- 4.3 API
- 4.4 几个关键方法
- 5. 动画播放和暂停控制
1. 添加动画
选中待提添加动画的物体, 在 Animation 窗口下
注意:如果选中的物体无Animation/Animator组件,会自动添加Animator组件。

2. Animation
2.1 制作界面

预览:启用/禁用场景预览模式。
录制:启用/禁用关键帧记录模式。
转到动画剪辑开头。
转到上一个 keyframe(关键帧)。
播放动画剪辑。
转到下一个keyframe(关键帧)。
转到动画剪辑末尾。
当前帧。
当前动画名字,下拉可以创建新的Animation动画。
样本,每秒/分的帧数。
添加关键帧。
添加事件。
时间轴。
控制删除属性或增减键。
简报。
曲线。
2.2 制作好的 Animation 动画

| Length | 长度(动画时长) |
|---|---|
| Loop Time | 循环 |
| Loop Pose | 循环动作(使循环时头部尾部衔接平滑) |
| Cycle Offset | 平滑度 |
2.3 添加和使用事件

public class AnimEvents : MonoBehaviour
{private void Start(){// 创建一个事件AnimationEvent evt = new AnimationEvent();// 绑定触发事件后要执行的方法名evt.functionName = "PrintEvent";// 执行方法后要传入的参数evt.intParameter = 12345;// 设置事件关键帧的位置,当事件过了1.3秒后执行evt.time = 0.5f;// 设置目标动画剪辑AnimationClip clip = this.GetComponent<Animator>().runtimeAnimatorController.animationClips[0];// 绑定事件clip.AddEvent(evt);}private void TestAniEvent(string param){Debug.Log("事件触发,参数是:" + param);}private void PrintEvent(int param){Debug.Log(param);}
}
==注意:==脚本和 animator 所在的对象所处同一对象
3. Animator
3.1 制作界面

3.2 一些参数解释
- Solo 和 Mute
当一个动画有多个后续动画时:

当该动画播放完后优先选择动作列表中最前(或者说最上的)的状态转移
Solo:当设置了某个 Transitions 为 Solo 时,那么优先选择标记 Solo 的动画转移
Mute:选择的状态转移被禁用 - ** Has Exit Time**
是否有退出时间。简单理解:开启表示等待当前动画进行完才可进行下一个动画;关闭表示可以立即打断当前动画并播放下一个动画
3.3 动画参数


代码控制:
public class AnimControl : MonoBehaviour
{private Animator anim;private void Start(){anim = this.GetComponent<Animator>();}private void Update(){if (Input.GetKeyDown(KeyCode.R)){anim.SetBool("BoolParams", true);}if (Input.GetKeyDown(KeyCode.S)){anim.SetBool("BoolParams", false);}}
}

4. Animator中相关类、属性、API
4.1 类
AnimationClip: 动画片段,animation
| 属性/方法 | 含义 |
|---|---|
| length | 动画长度,单位为秒。(只读) |
| frameRate | 对关键帧进行采样的帧率。(只读) |
| length / (1 / frameRate) | 总帧率 |
| AddEvent | 将一个动画事件添加到该剪辑中 |
AnimatorStateInfo: 动画状态机状态信息
| 属性/方法 | 含义 |
|---|---|
| fullPathHash | 该状态的完整路径哈希 |
| length | 状态的当前持续时间 |
| normalizedTime | 状态的标准化时间 |
| speed | 该动画的播放速度。1 表示正常播放速度 |
4.2 属性
| 属性 | 含义 |
|---|---|
| speed | 动画器的播放速度。1 为正常播放速度 |
| runtimeAnimatorController.animationClips | 返回所有动画 AnimationClip[] |
4.3 API
| 方法名 | 含义 |
|---|---|
| GetBool | 返回给定布尔参数的值 |
| GetFloat | 返回给定 float 参数的值 |
| GetInteger | 返回给定整数参数的值 |
| SetBool | 设置给定布尔参数的值 |
| SetFloat | 将浮点值发送到动画器以影响过渡 |
| SetInteger | 设置给定整数参数的值 |
| GetCurrentAnimatorClipInfo | 返回给定层当前状态中所有 AnimatorClipInfo 的数组 |
| GetCurrentAnimatorClipInfoCount | 返回当前状态中 AnimatorClipInfo 的数量 |
| GetCurrentAnimatorStateInfo | 返回 AnimatorStateInfo,其中包含有关当前状态的信息 |
| GetNextAnimatorClipInfo | 返回给定层下一个状态中所有 AnimatorClipInfo 的数组 |
| GetNextAnimatorClipInfoCount | 返回下一个状态中 AnimatorClipInfo 的数量 |
| GetNextAnimatorStateInfo | 返回 AnimatorStateInfo,其中包含有关下一个状态的信息 |
| Play | 播放一个状态 |
4.4 几个关键方法
Animator.Play
void Play(string stateName, int layer = -1, float normalizedTime = float.NegativeInfinity);
| Parameters 参数 | Description 描述 |
|---|---|
| stateName | 将要播放的动画状态名字。 |
| layer | 动画状态所在的层。 |
| normalizedTime | 将要播放动画状态的归一化时间(0-1,时间比例值)。 |
5. 动画播放和暂停控制
1. Animotor
// 播放
animator.Play("ani_name");
// 暂停
animator.speed = 0;
// 继续播放
animator.speed = 1;
// 重置到起始帧
animator.Play("ani_name", 0, 0f);
2. Animation
// 播放
animition.Play("ani_name");
// 暂停
animition["ani_name"].speed = 0;
// 继续播放
animition["ani_name"].speed = 1;
// 重置到起始帧
public void ResetAni(Animation ani, string name)
{AnimationState state = ani[name];ani.Play(name);state.time = 0;ani.Sample();state.enabled = false;}
相关文章:
Unity Animation、Animator 的使用
文章目录 1. 添加动画2. Animation2.1 制作界面2.2 制作好的 Animation 动画2.3 添加和使用事件 3. Animator3.1 制作界面3.2 一些参数解释3.3 动画参数 4. Animator中相关类、属性、API4.1 类4.2 属性4.3 API4.4 几个关键方法 5. 动画播放和暂停控制 1. 添加动画 选中待提添加…...
Flink--2、Flink部署(Yarn集群搭建下的会话模式部署、单作业模式部署、应用模式部署)
星光下的赶路人star的个人主页 你必须赢过,才可以说不在乎输赢 文章目录 1、Flink部署1.1 集群角色1.2 Flink集群搭建1.2.1 集群启动1.2.2 向集群提交作业 1.3 部署模式1.3.1 会话模式(Session Mode)1.3.2 单作业模式(Per-Job Mod…...
执行Django 的迁移命令报错[1193, Unknown system variable default_storage_engine]
在学习“”编写你的第一个 Django 应用程序,第2部分”时候,遇到一个问题。 执行迁移命令 python manage.py makemigrations polls 后,报错: migrations.py:109: RuntimeWarning: Got an error checking a consistent migration …...
Himall商城-公共方法
目录 1 Himall商城-公共方法 1.1 /// 根据订单id获取订单项 1.2 /// 根据订单项id获取售后记录 1.3 /// 判断订单是否正在申请售后 Himall商城-公共方法 #region 公共方法 public static List<InvoiceTitleInfo> GetInvoiceTitles(long userid) {...
海域可视化监管:浅析海域动态远程视频智能监管平台的构建方案
一、方案背景 随着科技的不断进步,智慧海域管理平台已经成为海洋领域监管的一种重要工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,可实现海洋管理的数字化转型。 传统的…...
使用Spring Boot + MyBatis实现多数据源
一、引言 在开发中,我们经常会遇到需要连接多个数据库的情况。使用Spring Boot和MyBatis框架可以很方便地实现多数据源的配置和使用。本文将详细介绍如何在Spring Boot项目中使用多数据源。 二、实操 1、添加所需的依赖: <!-- Spring Boot Starte…...
C++中的无限循环
C中的无限循环 while、 do…while 和 for 循环都包含一个条件表达式,在它为 false 时循环结束。如果您指定的条件总是为 true,循环就不会结束。 无限 while 循环类似于下面这样: while(true) // while expression fixed to true {DoSomethi…...
Spark2x原理剖析(二)
一、概述 基于社区已有的JDBCServer基础上,采用多主实例模式实现了其高可用性方案。集群中支持同时共存多个JDBCServer服务,通过客户端可以随机连接其中的任意一个服务进行业务操作。即使集群中一个或多个JDBCServer服务停止工作,也不影响用…...
tomcat安装、部署JSPGOU项目、Tomcat多实例
安装 官网找包 Apache Tomcat - Welcome! tomcat 8 准备运行环境 安装tomcat catalina.sh 服务脚本管理文件 server.xml 主配置文件 修改8009(删除注释) 启动tomcat 访问 为了避免每次进入绝对路径启动tomcat 法二: 三:部署…...
257. 二叉树的所有路径
题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 我的想法: 层次遍历不好解,可用找到叶子节点,但是他有一个回溯过程,他要一直保留路径节点,层次迭代不好加回溯。 递归…...
windows10使用wheel安装tensorflow2.13.0/2.10.0
安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的包 注意: tensorflow 2.10.0是最后一个支持GPU的版本 安装虚…...
sql-gen:点击生成SQL、RO、VO的工具
sql-gen仓库地址:码云 Github 1. 概述 sql-gen是一个用于提高后端接口开发效率的小工具,主要有如下功能: 生成连表SQL语句根据WHERE条件来生成封装查询条件的实体类(RO)根据SELECT列来生成封装查询结果的实体类&…...
pytorch从0开始安装
文章目录 一. 安装anaconda1.安装pytorch前需要先安装anaonda,首先进入官网(Anaconda | The Worlds Most Popular Data Science Platform)进行安装相应的版本。2.接着按如图所示安装,遇到下面这个选项时,选择all users.3.选择自己…...
Java 语言实现最小生成树算法(如Prim算法、Kruskal算法)
引言: 在图论中,最小生成树是指一个无向图的生成树,其所有边的权值之和最小。解决最小生成树问题的两种主要算法是Prim算法和Kruskal算法。本文将深入探讨这两种算法并比较它们的优缺点,以帮助读者更好地理解最小生成树算法的原理…...
什么是Linux的Overcommit和OOM
overcommit_memory参数说明: 设置内存分配策略(可选,根据服务器的实际情况进行设置) /proc/sys/vm/overcommit_memory 可选值:0、1、2。 0, 表示内核将检查是否有足够的可用内存供应用进程使用…...
解决防火墙导致虚拟机不能ping通宿主机的问题
今天,无缘无故的,虚拟机突然用不了,网络连上不了,一番折腾翻找,最后才发现,是因为虚拟机ping不同宿主主机了,连网关都ping不通了,但是,宿主主机却可以ping通虚拟机 。 最…...
数据结构:线性表(栈的实现)
文章目录 1. 栈(Stack)1.1 栈的概念1.2 栈的结构链表栈数组栈 2. 栈的定义3. 栈的实现3.1 初始化栈 (StackInit)3.2 入栈 (StackPush)3.3 出栈 (StackPop)3.4 检测栈是否为空 (StackEmpty)3.5 获取栈顶元素 (StackTop)3.6 获取栈中有效元素个数 (StackSize)3.7 销毁栈 (StackDe…...
python如何将一个dataframe快速写入clickhouse
目录 前言思路与核心代码优缺点分析 前言 dataframe是用python做数据分析最场景的数据结构了,如何将dataframe数据快速写入到clickhouse数据库呢?这里介绍几种方法,各有优劣势,可以结合自己的使用场景挑用。 思路与核心代码 假…...
Tiny Player Mac:小而美,音乐播放的极致体验
对于追求音质和操作简便的Mac用户来说,Tiny Player Mac是一款不可多得的音乐播放器。它以简洁的界面、强大的功能和优异的性能,吸引了无数用户的目光。接下来,让我们一起了解这款小而美的音乐播放器。 Tiny Player Mac支持多种音频格式&#…...
2022年12月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 第1题:漫漫回国路 2020年5月,国际航班机票难求。一位在美国华盛顿的中国留学生,因为一些原因必须在本周内回到北京。现在已知各个机场之间的航班情况,求问他回不回得来(不考虑转机次数和机票价格)。 时间限制:1000 内存限制:65536 …...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
