unity 动画系统不会用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 动画系统不会用相关的知识,希望对你有一定的参考价值。

我ctrl+6打开了动画系统,做了个主角行走动画,我想要在js代码中停止和播放此动画,怎么做?(⊙_⊙?)

参考技术A 你先要确定你绑定的动画组件是animation 还是animator, 前者是经典的动画系统,后者是4.x版本加入的新动画系统 Mecanim。
Animation 组件直接在脚本中使用animation.Stop()就是停止当前所有动画,Play()就是播放当前默认动画。 animation["你的动画 clip名称"]可访问clip的各种参数(可详见unity 脚本参考AnimationState类),speed动画速度(0表示静止), time动画当前时间轴位置, normalizedTime 规格化时间轴(从0到1.0代表时间轴位置),等等还有许多其它参数。比如,你有3个clip,a1,a2,a3加入了动画序列,当前你只想播放2, 从中间以速度0.5播放,你可以:
animation[“a2”].normalizedTime = 0.5;
animation["a2"].speed = 0.5;
animation.Play("a2"); // 如果你想动作融合,就换成 animation.Blend("a2");

Mecanim的动画你要通过animator访问。
用animator.Play(动画状态名或编号,动画层,动画规划化时间)播放你一个动画状态。
animator.speed 调整animator的播放速度,0为静止。追问

我想用的是旧版的,储存动画到asset文件夹里面了,叫:"walking"。那是不是要用到的时候写animation.Blend("walking");

追答

blend是动作混合,前提是你的animation 需要有至少一个剪辑是play状态,如果animation是停止状态,那混合就没有作用。你直接写动画剪辑的名字是可以的。blend函数还有另外两个参数,权重默认是1.0和过度时长默认0.3。 Blend(“Walking”, 0.5,0.1),就是权重0.5, 0.1过度开始混合。

也可以用CrossFade("walking") 或 CrossFade("walking", 0.5) ,0.5秒过度时间。
这个函数作用是从当前动画剪辑过度并播放到设定的剪辑。

追问

“前提是你的animation 需要有至少一个剪辑是play状态,如果animation是停止状态,那混合就没有作用”是什么意思?

追答

animation 在stop的状态下,其中所有动画剪辑都没有播放,用blend就没有效果。

你必须先播放一个“主剪辑”,然后再设定要混入的剪辑,比如先播放“走路”的剪辑,再混入“打招呼”的剪辑,最终得到一个变走路变打招呼的动画。过程就是,1)先用Play()或CrossFade()播放一个 剪辑。2)紧接着用Blend加入要动作混合的B剪辑。3)如果要混入1个以上的剪辑,就重复使用Blend混入剪辑C、D、E...

本回答被提问者和网友采纳

Unity3d 动画系统

Unity3d学习笔记 本篇简单介绍Unity3d中的动画系统及其使用。

模型导入

以带动画的FBX文件为例,unity版本为5.0以上版本。

新版动画系统

当你导入FBX文件后,会发现模型具有一个Animator(状态机)组件。

技术分享图片

我们一般将它成为(新)动画系统,新动画系统和旧版的动画系统(unity3d 4.3之前版本)的区别就在于使用了Animator组件代替了原来的Animation

旧版动画系统

同理当你使用的是旧版的动画系统就会发现是Animation组件。

技术分享图片

在高版本的unity3d你可以通过设置模型的Rig选项设置动画的类型。

参数 Animation type

  • Legacy: 旧版本的动画
  • Generic: 通用的动画
  • Humanoid: 类人动画

技术分享图片

动画导入

  • 动画分割 Animation Clips

你可以将动画分割成若干个独立的动画。

参数 Loop Time :是否循环播放。

技术分享图片

  • 多个模型文件

你也可以使用多个模型文件导入动画,命名约定——"模型名称"@"动画名称".fbx

如: test.fbx ,[email protected] ,tes[email protected]

动画的播放和使用

Animator

你需要在项目中新建一个Animator Controller来控制动画的播放。
然后双击切换到Animator视图

你会发现有三个默认状态

  • Entry: Animator的入口

  • Any State:任意的状态

  • Exit: 退出状态

我们添加两个状态用来表示两个分别不同的动画,分别名为idlemove

idleEntry状态连接表示Animator进来执行该动画,点击状态在motion选择要执行的动画。
一般入口状态为idle 动画,用来表示模型闲置的状态。

再将idle状态和move状态连接,箭头指向move,表示从闲置状态开始运动。
将move状态和idle状态连接,箭头指向idle,表示从运动状态转为闲置状态。

技术分享图片

动画的Animator(状态机)配置好了,我们需要添加一些参数来作为Animator在各个状态之间切换的条件。

在左上角的Prameters中添加两个bool变量,分别表示模型闲置和移动两种状态。

Prameters参数类型:

  • Float:float类型的参数,多用于控制状态机内部的浮点型参数。

  • Int:int类型的参数,多用于控制状态机内部的整型参数。

  • Bool:bool类型参数,多用于状态切换。

  • Trigger:本质上也是一个bool类型的参数,但是其值默认为false,且设置为true后系统会自动将其还原为false。

设置 Idling :true Moving : false

点击箭头,为状态的转换切换条件

参数 Has Exit Time:表示在动画播放完才会切换到下一动画。

技术分享图片

最后使用代码控制动画:


using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    private Animator _animator;
    
    void Start()
    {
        _animator = this.GetComponent<Animator>();
    }
    
    void Update()
    {
        if( Input.GetKeyDown("q") )
        {
            _animator.SetBool ("Idling",false);
            _animator.SetBool ("Moving",true);
        }
        if( Input.GetKeyDown("w") )
        {
            _animator.SetBool ("Idling",true);
            _animator.SetBool ("Moving",false);
        }
    }
}


Animation

你可以通过 play Automatically选择是否自动播放或是

代码控制:


using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

        
    Animation _animation;
        
        void Start() {
            
        _animation = GetComponent<Animation>();


        }

    void Update(){
        
        if( Input.GetKeyDown("q") )
        {
            _animation.Play("Take 001");
        }
        if( Input.GetKeyDown("w") )
        {
            _animation.Play("Take 0010");
        }
    }

        
}





以上是关于unity 动画系统不会用的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 动画系统(Animation)

unity3D5旧动画系统注意事项

Unity笔记一些动画系统状态机细节

Unity编程Unity动画系统

Unity3d 动画系统

Unity3D之Legacy动画系统学习笔记