unity 动态获取Animator 状态机中某个动画片段的播放速度(获取到速度来计算 播放时长)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 获取某个动画片段的播放速度,并且得到播放时长
    • 1.获取速度
    • 2.计算时长
  • 总结


前言

这个功能主要是因为 每个动画片段的播放速度不一样,需要获取到速度来计算 播放时长。

获取某个动画片段的播放速度,并且得到播放时长

1.获取速度

 /// <summary>/// 播放动画/// </summary>/// <param name="obj_">带有Animator的Obj</param>/// <param name="animatorName_">动画名称</param>public virtual void ObjPlayAnimator(Animator obj_, string animatorName_, Action<GameObject> action_){//获取动画组件var anim = obj_.GetComponent<Animator>();float speed_ = 1;//默认给1获取AnimatorController中的所有层级:
//AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
//AnimatorControllerLayer[] layers = controller.layers;
//遍历每个层级,获取层级中的状态机:
//foreach (AnimatorControllerLayer layer in layers)
//{
//    AnimatorStateMachine stateMachine = layer.stateMachine;
//    // 这里可以进一步处理状态机中的逻辑
//}//获取AnimatorController中的0层级AnimatorController controller = anim.runtimeAnimatorController as AnimatorController;AnimatorStateMachine stateMachine =controller.layers[0].stateMachine;//获取层级中的状态机ChildAnimatorState[] states = stateMachine.states;//遍历状态机,for (int i = 0; i < states.Length; i++){if (states[i].state.name== animatorName_)//判断得到你要的动画速度  {speed_ = states[i].state.speed;}}Debug.LogError("speed_="+ speed_);//播放anim.Play(animatorName_, 0, 0);//计算动画时长float time_ = GetAnimatorLength(anim, animatorName_) * (1 / speed_);//播放完成后 返回事件StartCoroutine(OverAnimation(obj_.gameObject, action_, time_));}IEnumerator OverAnimation(GameObject Obj, Action<GameObject> action_, float itme_){yield return new WaitForSeconds(itme_);action_.Invoke(Obj);}

2.计算时长

代码如下(示例):

 /// <summary>/// 获得animator下某个动画片段的时长方法/// </summary>/// <param animator="animator">Animator组件</param> /// <param name="name">要获得的动画片段名字</param>/// <returns></returns>public float GetAnimatorLength(Animator animator, string name){//动画片段时间长度float length = 0;AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;//Debug.Log(clips.Length);foreach (AnimationClip clip in clips){// Debug.Log(clip.name);if (clip.name.Equals(name)){length = clip.length;break;}}return length;}

总结

好记性不如烂笔头

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点&#xff1a;DOM树中的每一个…

CHAT~(持续更新)

CHAT&#xff08;持续更新&#xff09; 实现一个ChatGPT创建API设计页面布局业务操作技术架构 编码其他 实现一个ChatGPT 创建API 最简单也最需要信息的一步 继续往下做的前提 此处省略&#xff0c;想要获取接口创建方式联系 设计 页面布局 按照官网布局 业务操作 注册登…

绝地求生:PUBG七周年庆典开启!参与周年话题投稿赢丰厚奖励

为庆祝七周年&#xff0c;闲游盒PUBG官方准备了众多活动与奖励&#xff0c;一起在庆典中创造难忘的回忆吧&#xff01;七周年庆典期间游玩PUBG&#xff0c;参与 #乐在7中鸡味无穷# 周年话题投稿&#xff0c;即有机会赢取魔力甜心萨莉套装 2奖励。 参与方式 在小黑盒PUBG社区中…

贪心算法相关题目

文章目录 1. 什么是贪心&#xff1f;2. 分发饼干3. 摆动序列4. 最大子数组和5. 买卖股票的最佳时机 II6. 跳跃游戏7. 跳跃游戏 II8.K 次取反后最大化的数组和9.加油站10.分发糖果11.柠檬水找零 1. 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而…

Python数据分析一

一、Python之输出函数和输入函数 Python中的输出函数和输入函数分别是print()和input()。 输出函数 print() print()函数用于将数据打印到标准输出&#xff08;通常是控制台&#xff09;&#xff0c;以便用户查看。它可以接受一个或多个参数&#xff0c;并在打印时使用空格分隔…

第1篇:Mysql数据库表结构导出字段到Excel(一个sheet中)

package com.xx.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.sql.*; import java.io.*;public class DatabaseToExcel {public static void main(String[] args) throws Exception {// 数据库连接配置String u…

Less-1(sqlmap手工注入攻击)--sqli

第一步&#xff1a;判断他是什么sql注入&#xff1f; 1 报错 1 and 12 -- 错误结果(--表示注释符) 1 and 11 -- 正确结果 第二步&#xff1a;判断返回字段数 ?id1 order by 3-- 正确显示结果 ?id1 order by 4--当列数为4时开始报错&#xff0c;所以只有三列 注&#xf…

机器学习核心原理

机器学习的核心原理是利用数据和数学模型来训练计算机系统&#xff0c;使其能够从数据中学习并进行预测、分类、识别、聚类等任务。以下是机器学习的核心原理&#xff1a; 1. **数据表示**&#xff1a;机器学习的基础是数据&#xff0c;而数据的表示对于机器学习任务至关重要。…

github的2FA问题

文章目录 问题描述方式一&#xff1a;chrome浏览器插件 问题描述 方式一&#xff1a;chrome浏览器插件 1、 第一步 安装插件&#xff1a;Authenticator 2、 第二步 打开github验证界面&#xff0c;并点击该插件

15 网络管理与网络安全(3)

1.入侵检测系统的基本功能 ① 监控、分析用户和系统的行为&#xff1b;② 检查系统的配置和漏洞&#xff1b;③ 评估重要的系统和数据文件的完整性&#xff1b;④ 对异常行为的统计分析&#xff0c;识别攻击类型&#xff0c;并向网络管理入员报警&#xff1b;⑤ 对操作系统进行…

关于分布式系统设计的个人看法和经验

1.接口要保证幂等 2.客户端要设置超时时间和兜底措施 3.服务端调用三方要设置超时和重试机制以及兜底 4.服务端要有熔断和降级以及限流机制 5.避免使用大事务 6.对热点数据使用缓存(浏览器缓存/客户端缓存/分布式缓存/应用级缓存) 7.对大表数据考虑分库分表 8.对于需要进行多表…

蓝桥杯-模拟-航班时间

题目 思路 去时到达外地的时间-去时离开本地的时间 时区差时飞行时间 回时到达本地的时间-回时离开外地的时间 -时区差时飞行时间 故二者加起来即可得到飞行时间 代码 # 去时到达外地的时间-去时离开本地的时间 时区差时飞行时间 # 回时到达本地的时间-回时离开外地的时间 -…

突破编程_C++_C++11新特性(lambda表达式的实战应用)

1 Lambda 表达式的调用与操作 1.1 Lambda 表达式作为函数参数传递 Lambda 表达式可以像普通函数或函数对象一样被传递作为函数的参数。这种灵活性使得 Lambda 表达式在 C 的算法库和函数式编程风格中特别有用。当需要将一个小的、匿名的函数作为参数传递给另一个函数时&#…

时间对比投资:衡量5天与10天六西格玛绿带培训的价值

六西格玛绿带培训专为希望提高其业务流程改进技能的专业人员设计。绿带培训通常涵盖六西格玛的基础知识、DMAIC(定义、测量、分析、改进、控制)方法论、以及各种质量管理工具和技巧。绿带受训者通常在他们的工作职责中负责领导小型项目或作为黑带项目团队的成员&#xff0c;下面…

小兴教你做平衡小车-蓝牙模块JDY-31介绍

文章目录 1 前言2 模块资料下载3 模块介绍3.1 模块特点3.2 模块相关指令介绍3.3 指令学习3.3.1 查看版本号3.3.2 软复位3.3.3 查看模块的波特率3.3.4 修改模块的波特率3.3.5 蓝牙配对密码查看3.3.6 修改蓝牙配对密码3.3.7 广播名查询3.3.8 广播名修改3.3.7 恢复出厂配置3.3.8 串…

游戏学(Ludology)探秘

游戏学&#xff08;Ludology&#xff09;探秘 李升伟 李昱均 常秀琼 1. 游戏学&#xff1a;概念 Ludology&#xff08;游戏学&#xff09;是研究游戏设计、游戏行为和游戏文化的一个领域。它涉及对游戏结构、规则、玩法、设计原则和游戏体验的研究&#xff0c;旨在深入理解…

人工智能的春天:改变已然发生

以下文章来源&#xff1a;青岛日报 某种意义上说&#xff0c;这个春天属于人工智能&#xff08;AI&#xff09;。 继一年多前ChatGPT惊艳全球后&#xff0c;OpenAI再次放出“王炸”成果——视频大模型Sora&#xff1b;苹果放弃布局多年的造车计划&#xff0c;将ALL in AI&#…

MySQL数据库的事务

目录 1、事务的概念 2、事务的ACID特点 2.1 原子性 2.2 一致性 2.3 隔离性 2.3.1MySQL事务隔离级别 2.3.2事务隔离级别的作用范围 2.3.3 查询事务的隔离级别 2.3.4 设置事务的隔离级别 ​编辑 2.4 持久性 3、事务控制语句 3.1测试begin和commit&#xff08;开始…

【Semidrive X9HP】硬件投屏设置仪表图层层级

一、问题描述 仪表屏的弹窗会被中控的投屏内容覆盖&#xff0c;导致在投屏的时候看不到仪表的弹窗内容&#xff0c;不符合实际使用需求&#xff0c;需要弹窗显示在投屏内容的上层。 二、问题分析与解决 1. 打入硬件投屏补丁&#xff08;补丁如附件&#xff09;&#xff0c;仪…

SOC子模块---RTC and watchdog

RTC RTC大致执行过程&#xff1a; 对SOC 中的锁相环或者外部晶振的时钟进行计数&#xff1b;产生时&#xff0c;分&#xff0c;秒的中断&#xff1b;送给中断控制器&#xff1b;中断控制器进行优先权选择后送给cpu&#xff1b;Cpu执行中断服务程序&#xff1b;在中断服务程序…