事情是这样的,我尝试在一帧内多次切换一些状态(当前状态为Idle的情况下):

public Animator animator;void OnEnable()
{animator.CrossFade("BeAttack1", 0.2f);animator.CrossFade("Idle", 0.2f);
}

但结果并非播放Idle,而是播放BeAttack1。

在Animator刷新前,它所播放的是最后一次调用接口的信息,谁排在后执行谁。

并且当一个状态处于过渡时,Animator默认这个状态还没有跳转,只有过渡完成才算跳转到另一个状态(具体看这篇:http://www.cnblogs.com/hont/p/4786462.html)

下面这幅图说明了这个问题:

Animation有一个动画队列可以解决这个问题,而Animator取消了动画队列。

而用协程的话又会变得非常麻烦,于是我想到了用Animator.Update来解决:

public static void ForceCrossFade(this Animator animator, string name, float transitionDuration, int layer = 0, float normalizedTime = float.NegativeInfinity)
{animator.Update(0);if (animator.GetNextAnimatorStateInfo(layer).fullPathHash == 0){animator.CrossFade(name, transitionDuration, layer, normalizedTime);}else{animator.Play(animator.GetNextAnimatorStateInfo(layer).fullPathHash, layer);animator.Update(0);animator.CrossFade(name, transitionDuration, layer, normalizedTime);}
}

我写了一个CrossFade的扩展,强制调用Update,如果当前没有下一个动画跳转则直接混合,如果有就强制切到跳转然后混合。

调用测试脚本:

void OnEnable()
{animator.ForceCrossFade("BeAttack1", 0.2f);animator.ForceCrossFade("Idle", 0.2f);
}

OK,测试无误,最后又回到了Idle:

注意:ForceCrossFade不能在SMB里的Update中调用,否则会死循环,如果一定要调用需要加一个标记判断

转载于:https://www.cnblogs.com/hont/p/5196485.html

记一次Animator状态快速切换问题的解决相关推荐

  1. mysql主从切换gtid不一致_GTID 复制、主从不一致跳过操作、快速切换master

    1. 部署 GTID 全局事务标识  mysql 5.6 加入 1.1 准备 配置文件 ## gtid repl config need server_id=52 #开启gtid gtid_mode= ...

  2. 切换用户_Mac如何在多个用户间快速切换?

    很多小伙伴在使用Mac的时候,都会设置多个用户,不同的用户可以设置不同的桌面,作用于不同的场景.切换用户的方法,大家都知道的就是注销.然而有的时候我们需要频繁的在多个用户之间进行切换,如果每次都要先注 ...

  3. 如何实现一个地图库封装,可以快速切换地图

    前言 日前在公司负责的主要业务是gis开发相关,现在使用的是百度地图,百度地图相比高德地图总有些缓慢.卡顿.因此才想到了这个方案.实现一个自己的库,可以快速切换百度地图与高德地图. 思路 有了上面这个 ...

  4. 计算机直接切换到桌面,屏幕如何快速切换桌面

    屏幕如何快速切换桌面 导语:我们在使用电脑的时候,尤其是工作或者游戏的时候,需要经常切换windows系统窗口,然后切换窗口的方法是有很多的,那么到底哪种切换窗口的方法又快速又高效呢?以下是小编精心整 ...

  5. 关于微信聊天与朋友圈如何快速切换 Mark

    用微信时,你是否遇到这样的情况.你正刷着朋友圈,享受着各种鸡汤,这时候,你收到一条微信,一看是女王大人,不得不回.你诚恳的回了一条,等了二十秒不见有什么回应,于是就退了出来,进入朋友圈找到那篇没看完的 ...

  6. 打开计算机窗口的快捷键是什么,快速切换窗口的快捷键是什么

    快速切换窗口的快捷键是什么 使用快捷键能让我们更加快捷地操作电脑,那么快速切换窗口的快捷键是什么呢?下面小编带着大家一起来了解一下吧! 快速切换窗口的快捷键 方法一.Alt+Tab快捷键切换窗口 在使 ...

  7. EasyPlayer RTSP Android安卓播放器实现视频源快速切换

    EasyPlayer现在支持多视频源快速切换了,我们介绍一下是如何实现的. 这个需求通常应用在一个客户端需要查看多个视频源的情况,比如多个监控场景轮播. 由于EasyPlayer的播放端已经放在Fra ...

  8. 一键快速设置图层lisp程序_CAD快速切换图层LISP代码

    CAD 快速切换图层 LISP 代码 给楼主发一个图层更改的 lisp 程序,按对应数字键就可以切换到相应的图层.很方便. 0 ---- 0 1 ---- OBJ 2 ---- 6t 3 ---- S ...

  9. 一键快速设置图层lisp程序_CAD快速切换图层LISP代码 -

    CAD快速切换图层LISP代码 给楼主发一个图层更改的lisp程序,按对应数字键就可以切换到相应的图层.很方便. 0----0 1----OBJ 2----6t 3----SCETR ... 8--- ...

最新文章

  1. VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
  2. vector容器总结.xml
  3. 无密码进去mysql_技术分享 | 安全地无密码登录 MySQL
  4. openpose_net随机搜索网络源代码
  5. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
  6. 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理
  7. 用linux mail命令发送邮件时指定发送人
  8. iOS开发:通过经纬度获得城市、省份等信息
  9. 使用Disentangling形式的损失函数回归2D和3D目标框
  10. CV Papers|计算机视觉论文推荐周报20200601期
  11. 计划排布方式--甘特图
  12. fastjson使用-- @JSONField使用(转)
  13. 服务器磁盘管理 知识点
  14. 少儿编程主要是学什么内容?含教程
  15. NumPy 数组属性
  16. 使用itext到处PDF,使用PDF模板导出PDF文件
  17. 【JAVA】xml文件的读取
  18. 传奇手游服务器搭建_如何架设一个传奇手游?需要那些东西?
  19. 帧缓冲区对象 FBO
  20. JavaScript中的拖拽事件且限制出界

热门文章

  1. [ZZ].NET自动探索式测试工具——Pex
  2. iOS项目开发实战——制作视图的缩放动画
  3. Bazel C++ 基础[翻译]
  4. 关于公开产品想法这件事的开篇
  5. 小米9.0系统最简单激活xposed框架的教程
  6. 一个月薪两万的Web安全工程师要掌握哪些技能?
  7. LeetCode-326. Power of Three
  8. 不使用库函数将字符串转换为数字
  9. SQLite连接C#笔记
  10. 深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL