精华内容
下载资源
问答
  • 动画倒放
    千次阅读
    2019-11-01 17:50:52

    首先:百度到的Animator倒放方法可以用(https://jingyan.baidu.com/article/d713063593f99f13fdf475e1.html)。

     

    但是 该方法需要在controller中添加参数,如果项目中有很多动画需要倒播,这么做出错率很高,重复劳动也很令人焦虑。

     

    在网上一番搜索找到这位仁兄的方法:https://blog.csdn.net/qq_41752435/article/details/90113402#commentBox

     

    一番测试之后确实可以使用,但是有几点需要补充说明一下:

     

    1. Animator的播放速度由 Animator.speed 控制,断点后发现,如果不先执行 Animator.StartPlayback()方法,speed的值是不可以被赋负值的,会被置0。所以很多人问为什么speed置-1动画暂停了,因为其实是置0了。
    2. Animator.StartPlayback()方法应该是配合StartRecording()等方法用于动画的录制和回放的,不知道为什么会影响到speed的赋值。
    3. 注意,如果需要倒放动画,需要从最后一帧往前放,和正常播放是相反的,所以需要执行:                                                         ani.Play(clipInfo.clip.name, 0, 1) , 正常的播放是ani.Play(clipInfo.clip.name, 0, 0)

     

     

    贴上测试代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class AnimatorTest : MonoBehaviour {
    
        Animator ani;
    
    	// Use this for initialization
    	void Start () {
            ani = GetComponent<Animator>();
    	}
    	
    	// Update is called once per frame
    	void Update () {
    
            if(Input.GetKey(KeyCode.A))
            {
                Play(1);
            }
            else if(Input.GetKey(KeyCode.B))
            {
                Play(-1);
            }
            else if (Input.GetKey(KeyCode.C))
            {
                Play(0.5f);
            }
            else if (Input.GetKey(KeyCode.D))
            {
                Play(-0.5f);
            }
            else if (Input.GetKey(KeyCode.E))
            {
                Stop();
            }
        }
    
        void Play(float speed)
        {
            if (ani != null)
            {
                //ani.enabled = false;
                ani.enabled = true;
    
                AnimatorClipInfo[] temps = ani.GetCurrentAnimatorClipInfo(0);
                AnimatorClipInfo clipInfo = new AnimatorClipInfo();
                if (temps.Length > 0)
                {
                    clipInfo = temps[0];//获取动画clip
                }
    
                ani.StartPlayback();
    
                ani.speed = speed;
    
                ani.Play(clipInfo.clip.name, 0, speed < 0 ? 1 : 0);
            }
        }
    
        void Stop()
        {
            AnimatorClipInfo[] temps = ani.GetCurrentAnimatorClipInfo(0);
            AnimatorClipInfo clipInfo = new AnimatorClipInfo();
            if (temps.Length > 0)
            {
                clipInfo = temps[0];
            }
            ani.Play(clipInfo.clip.name,0,0);
            ani.speed = 0;
        }
    }
    

     

      

     

     
     

     
     

     

     

      

     

     

     

     

    更多相关内容
  • 3.正放过程中,无法开启倒放动画,必须要等到正放播放完才能开启倒放。 解决办法如下: 1.先创建动画状态机 2.勾掉Has Exit Time 3.再创建float类型的参数,默认为1 4.给Move动画下的Speed——Multiplier...

    遇到问题:

    1.动画无法倒放;

    2.先正放完,后开始倒放动画时,出现时间上的延迟问题;

    3.正放过程中,无法开启倒放动画,必须要等到正放播放完才能开启倒放。

    解决办法如下:

    1.先创建动画状态机

    2.勾掉Has Exit Time

    3.再创建float类型的参数,默认为1

    4.给Move动画下的Speed——Multiplier设置上面创建的参数,进行控制速度

    5.编辑脚本Test

    using UnityEngine;
    
    public class Test : MonoBehaviour {
    	
    	// Update is called once per frame
    	void Update () {
    		if(Input.GetKeyDown(KeyCode.A))
            {
    			if (GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime <= 0)
    			{
    				GetComponent<Animator>().SetFloat("Speed", 1);
    				GetComponent<Animator>().Play("Move", 0, 0);
    			}
    			else if(GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime > 0)
                {
    				GetComponent<Animator>().SetFloat("Speed", 1);
    				GetComponent<Animator>().Play("Move", 0);
    			}
    		}
    		if(Input.GetKeyDown(KeyCode.D))
            {
    			if (GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime >1)
    			{
    				GetComponent<Animator>().SetFloat("Speed", -1);
    				GetComponent<Animator>().Play("Move", 0, 1);
    			}
    			else if (GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime <= 1)
                {
    				GetComponent<Animator>().SetFloat("Speed", -1);
    				GetComponent<Animator>().Play("Move", 0);
    			}
    
    		}
    	}
    }

    6.即可实现如下效果

    展开全文
  • Laya3D动画倒放后会循环播放的问题 问题详情:在animator.speed设置为负数(即反向播放时),动画会循环播放 类库版本:2.6.1 解决方法:

    Laya3D动画倒放后会循环播放的问题

    问题详情:在animator.speed设置为负数(即反向播放时),动画会循环播放
    类库版本:2.6.1
    解决方法:修改bin/laya.d3.js文件,找到_updatePlayer方法

    _updatePlayer(animatorState, playState, elapsedTime, islooping) {
                var clipDuration = animatorState._clip._duration * (animatorState.clipEnd - animatorState.clipStart);
                var lastElapsedTime = playState._elapsedTime;
                var elapsedPlaybackTime = lastElapsedTime + elapsedTime;
                playState._lastElapsedTime = lastElapsedTime;
                playState._elapsedTime = elapsedPlaybackTime;
                var normalizedTime = elapsedPlaybackTime / clipDuration;
                playState._normalizedTime = normalizedTime;
                var playTime = normalizedTime % 1.0;
                playState._normalizedPlayTime = playTime < 0 ? playTime + 1.0 : playTime;
                playState._duration = clipDuration;
                var scripts = animatorState._scripts;
                // 修改后代码 [修复动画倒放后会循环播放的bug 2021年3月11日14:05:02]
                if(!islooping){
                    if(elapsedPlaybackTime>0){
                        if(elapsedPlaybackTime >= clipDuration){
                            playState._elapsedTime = clipDuration;
                            playState._normalizedPlayTime = 1.0;
                        }
                    }else{
                        playState._elapsedTime = 0;
                        playState._normalizedPlayTime = 0.0;
                    }
                    if (scripts) {
                        for (var i = 0, n = scripts.length; i < n; i++)
                            scripts[i].onStateExit();
                    }
                    return;
                }
                //以下是原代码
                /* if ((!islooping && elapsedPlaybackTime >= clipDuration)) {
                    playState._finish = true;
                    playState._elapsedTime = clipDuration;
                    playState._normalizedPlayTime = 1.0;
                    if (scripts) {
                        for (var i = 0, n = scripts.length; i < n; i++)
                            scripts[i].onStateExit();
                    }
                    return;
                } */
                if (scripts) {
                    for (i = 0, n = scripts.length; i < n; i++)
                        scripts[i].onStateUpdate();
                }
            }
    
    展开全文
  • Unity动画倒放 - 仅Animator

    千次阅读 2020-01-03 17:03:25
    该方法需要配合Unity的Animator中的Transition来完成 在这个例子中,我是通过 继承了StateMachineBehaviour的类中的OnStateEnter方法中完成的 ...写入后,在需要设置成为倒放的地方添加animator.SetFloat(“Pla...

    该方法需要配合Unity的Animator中的Transition来完成

    在这个例子中,我是通过 继承了StateMachineBehaviour的类中的OnStateEnter方法中完成的

    首先在Unity的Animator中选中目标Animation,出现如下图所示的变量,按照红框内标记的内容勾选并填入

    写入后,在需要设置成为倒放的地方添加animator.SetFloat(“PlaySpeed”, -1);即可,这里的PlaySpeed (变量名称随便) 可以视为调节速度的参数,在原有的基础上与PlaySpeed相乘。

    文章来自CSDN【DeadRabbit6_0】

    【重点】此处为我的个人项目中遇到的问题,可能根据此方法大多会触发这个事件。

    当对应的.anim文件(也就是在文件夹中的Animation文件)的LoopTime选项为无的时候,会发生倒放的动画卡在第一帧,我的猜想是,当前播放的正常顺序应该是(假设Animation的播放时间为3.2)3.2 => 0,也就是从最后一帧到第一帧,我的脚本中设置播放PlaySpeed的位置为StateEnter,此时的动画已经播放到第一帧,系统识别已经到达最终目标,而且Animation没有选择Loop,所以会卡在“执行完毕”的情景下。所以根据这个猜想,应该是在调用倒放之前,使进入该动画的位置变为最后一帧,为了解决这个我尝试使用“在脚本中将animator强行跳到最后一帧的位置上”,但始终没有找到解决方法,最后是通过在Unity的Animator界面中,调节相应的Transition(前一个Animation到当前Animation的那一支),调节内容如下所示

    将需要执行的动画放在前面

    展开全文
  • Unity动画倒放

    千次阅读 2020-01-08 10:03:45
    在Animator面板里复制一个状态,名字改掉。在属性面板motion用同一个,把speed改为-1。...两个动画播放: quest.GetComponent<Animator>().Play("questEnter"); quest.GetComponent<Animator>...
  • 最近使用动画编辑器播录制了一个箱子爆炸的动画,达到了物体复原的魔法效果。 在动画编辑器中打开箱子爆炸动画,下方点击快退即可看到动画已经播了。 点击录制,选择新建的资源路径。 录制到想要的动画片段...
  • Unity 控制Animator动画倒放、停止播放

    千次阅读 2020-06-09 16:42:20
    //停止anim动画 } } } /**************************************************** 文件:AnimatorManager.cs 作者:RAN 邮箱: 1647707119@qq.com  日期:2020/6/8 16:47:36 功能:控制Animator动画倒放、暂停 *******...
  • 进而进行预览,但由于这一过程非常复杂,所以场景里面的动力学对象多的话,根本不能实现实时预览,更不能拖拽或者播,并且每次计算可能会有所差异,很难保证最终的动画效果。下面就来介绍一下如何在C4D中实现动力...
  • 进入 动画摄影表,而不是时间线, 选中所有骨骼动画,选中所有轨道里的关键帧,然后看一下一共是多少帧, 下面这个是1-31,一共30帧,算出中间帧是1+15=16帧,把播放定位移动到第16帧。 然后点击 关键帧 – 镜像 --...
  • publicGameObjectAnimationObj;//带有动画的对象 //Usethisforinitialization voidStart(){ AnimationObj.animation["AnimationName"].time=AnimationObj.animation["AnimationName"].clip.lengt...
  • GIF动态图怎么倒放?应该有很多网友都想知道吧,看了很多视频倒放的,那么GIF倒放要怎么完成呢?其实方法很简单,不会的网友...先预览一下原图:这里将gif动画倒着播放后,你知道会有什么样的效果吗?呵呵,聪明!原...
  • unity 动画正播放播(animation)

    千次阅读 2022-03-07 16:45:17
    using System.Collections; using System.Collections.Generic; using UnityEngine; public class door : MonoBehaviour { // private Transform door_transform; public GameObject AnimationObj;...
  • Unity中的Animation动画倒播、正播,亲测有效
  • Unity3d 实现动画(Animator)

    千次阅读 2021-04-25 11:06:16
    开发中经常会用到动画倒播功能,比如说房子的搭建,倒播后就可以实现房子的拆解功能。这里主要根据动画的速度值,-1倒播,1正播。实现的效果如图: 参数配置 如图: 1.打开Animator窗口; 2.选择Parameters参数...
  • UI动画的前放和倒放的效果是这样的: UI动画的前放和倒放方法一: 利用一个布尔变量简单暴力的判断UI的位置,然后通过DOLocalMove()实现UI的动画 具体代码如下: using System.Collections; using System....
  • ![图片说明](https://img-ask.csdn.net/upload/201909/28/1569600849_936390.jpg) 可用直接用鼠标点击那个bool参数以播放动画,但按键盘c键却
  • 把一个动画,复制成2个,Speed分别设置为 -1 和 1 ,然后直接正常使用就可以了。 , an.Play("Unity_Chan_Jump-1");----调用Speed=-1,则为播 an.Play("Unity_Chan_Jump-1");---调用Speed=1,则正序播放 ...
  • 主要介绍了在Unity中实现动画的正反播放代码,非常的实用,这里推荐给大家,希望大家能够喜欢。
  • UE4动画序列反向播放

    千次阅读 2021-09-09 17:50:08
    随便打开一个动画序列(这里用的mixamo上面的模型和动画),打开动画序列,将帧数拉到最后一帧,暂停动画,点击红色录制按钮。 选择保存路径以及命名 点击快退,录到一遍后点击停止 最后剪辑,在帧数位置右键...
  • 这是一款基于Three.js的交互动画特效。该特效使用Thress.js和TweenMax (GSAP)动画库制作,可生产非常炫酷的鼠标交互动画效果。
  • timeScale 属性   timeScale : number = 1 语言版本:  DragonBones 3.0 ...动画的播放速度。 [(-N~0): 倒转播放, 0: 停止播放, (0~1): 慢速播放, 1: 正常播放, (1~N): 快速播放] 实现  pu
  • [Unity][Timeline]倒放

    千次阅读 2021-02-20 22:38:26
    //播 } } //播 ================================================================ public IEnumerator tRewind() { yield return new WaitForSeconds(0.001f * Time.deltaTime); Director.time -= 1.0f * ...
  • CSS部分 <style type="text/css"> /* 动画 */ /* 1.开始状态 */ @keyframes move { /* 开始状态 */ 0% { transform: translate(0px, 0px) rotate(0deg); } ...
  • 改成-1即可 动画蓝图中 play rate 改成-1 蒙太奇也是一样的
  • usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; usingUnityEngine.Playables;...//入帶有Playable Director的物件(Director用"Hold"模式) publicPlayableDirector Dir...
  • libgdx -spine动画实现倒序播放

    千次阅读 2018-08-17 14:43:18
    是的,我们的通道实体实际上在我们设置或者增加某个动画的时候就会创建出来,所谓通道,是保证各动画平稳过度的层级关系,这里我一般使用0。话说道这里,我们继续往下走一波:看看setAnimation和AddAnimation是怎么...
  • 第一步:游戏物体身上的Animator ... /// 正播放动画 /// </summary> private void PlayCarAnimator(Animator anim,string animName) { anim.SetFloat("isDoor", 1f); if (anim.GetCurrentAnimatorStateIn

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,850
精华内容 5,140
关键字:

动画倒放

友情链接: UINB.rar