unity-动画状态机Animator

unity可以用两种方式控制动画
1. Animations,这种方式简单,直接 Play(“Idle”) 或者 CorssFade(“Idle”) 就可以播放动画
2. Animator,5.x之后推荐使用这种方式,因为里面可以加上混合动画,让动画切换更加平滑


1、导入模型及动作,做成预制件(perfab)

直接把整个模型文件夹拷入对应位置,unity会自动import进来

  1. 把模型拖进场景
  2. 然后报贴图拖到模型的身上
    这里写图片描述

  3. Hierarchy 中,新建一个 空对象xiaoGO,把模型丢到xiaoGO作为子节点,然后把xiaoGO拖入 Project 中做成预制件
    这里写图片描述


2、将模型骨骼转换成unity中的 Humanoid

这里写图片描述

  • 第4步点击之后,有个弹窗,点 Save 即可。
  • 如果转换成功 Configure 前面显示 v ,失败则显示 x
  • 第5步则更新相关的动画

3、添加状态机控制器

添加控制器脚本 animCtrl2
这里写图片描述

为模型aisake(aisakeGO对象下的aisake节点)添加 Animator 组件,拖入 animCtrl2Controller ,选择人物镜像Avatar(转换为Humanoid之后才会出现在选择列表中)
这里写图片描述


4、编辑状态机控制器

  • 编辑状态机控制器

    1. 双击 animCtrl2,会出来一个 Animator 面板,拖入三个动作作为状态(第一个拖入的作为默认状态,不过可以右键 Default State 设置其他状态为默认状态)
    2. 右键 AnyStateMake Transition 连接到三个状态
    3. 添加状态控制参数 AnimState,是个整形(一般来说用枚举,不过这里没枚举类型,但可以强转成int)
      这里写图片描述
  • 编辑切换状态的条件
    点击连线,添加个条件,这个条件只会显示刚才添加的状态控制参数 AnimState,设置等于0是切到这个状态
    这里写图片描述

  • 取消勾选 Can Transition To Self,不然动画会出现抖动
    这里写图片描述

  • 其他两个一样,设置不同的条件即可

关于 AnyState中的Transitions,看这里 http://blog.csdn.net/yangxuan0261/article/details/52334359
这里写图片描述


4、代码中控制状态

加个按钮去控制,按钮脚本

public class btnCtrl : MonoBehaviour {

    private int mAnimIndex = 0;
    private int mAnimTotal = 3;

    void Start () {
        OnClicked1();
    }

    public void OnClicked1()
    {
        GameObject go1 = GameObject.Find("aisakeGO");
        GameObject go2 = GameObject.Find("xiaoGO");
        Animator ator1 = go1.GetComponentInChildren<Animator>();
        Animator ator2 = go2.GetComponentInChildren<Animator>();

        if(ator1 && ator2)
        {
            //Debug.LogFormat("--- has ator1 && ator2, animIndex:{0}", mAnimIndex % mAnimTotal);
            ator1.SetInteger("AnimState", mAnimIndex % mAnimTotal); //设置状态控制参数值,用来切状态
            ator2.SetInteger("AnimState", mAnimIndex % mAnimTotal);
        }
        mAnimIndex++;
    }
}

5、done

这里写图片描述


注意事项

  1. 动作循环。不然如果没有下个状态切换,直接停止动作
    这里写图片描述

  2. Animator 中的 Avater 没有对应模型,那是因为没有模型没有转换成unity中的 Humanoid,参照第二步

  3. 使用 Animator组件 后就不需要 Animation组件

  4. Has Exit Time,如果勾选了,则表示在该动作完成后才允许切换,但是一般我们要的都是立即切换,所以这里 不要勾选
    这里写图片描述

  5. 取消勾选 Can Transition To Self,不然动画会出现抖动


参考
官方文档忘了保存了,其他的
http://answers.unity3d.com/questions/864734/using-humanoid-animations-with-generic-avatar.html
http://answers.unity3d.com/questions/956031/legacy-animations-and-unity-5-whats-the-deal.html
http://www.ceeger.com/Manual/AnimationSoloMute.html

youtube里的相关很好视频教程(能不能科学上网就看你自己了)
https://www.youtube.com/watch?v=WSkI3Px20Q4

  • 26
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Unity Animator动画状态机是一种用于控制游戏对象动画的工具。它可以将不同的动画状态组合在一起,形成一个状态机。在状态机中,每个状态代表一个动画,而状态之间的转换则代表不同的动画过渡。Animator动画状态机可以通过代码或可视化编辑器进行控制,使游戏对象的动画表现更加自然和流畅。 ### 回答2: Unity Animator 动画状态机是一个非常强大的工具,它可以被用来在Unity中控制和管理角色或物体的动画。它允许开发者使用最先进的动画技术,以及一系列可定制的功能来创建各种动画效果。在Unity Animator中,状态机系统是动画的核心并且是非常重要的。状态机是一个包含一系列状态的图表,其中每个状态都可以使用一定的逻辑从一个状态转换到另一个状态。状态机可以非常容易地控制对象的轨迹和动画效果,从而创造出非常酷的游戏体验。 在Unity中,Animator组件是一个与对象一起工作的控制器,它可以控制Sprite、Mesh、GameObject,以及其他可见物体的动画。Animator动画状态机与控制器交互来指定GameObject在不同状态下的动画表现和响应动作的运动。Animator状态机中的每个状态都有一个名称和一些条件,这些条件在满足时会导致状态之间的转换。开发人员可以使用条件控制器中的事件和参数来更改这些条件,以使动画状态一直保持准确和高效的变化。 一个Animator状态机包括一些状态和转换条件。状态是单独的动画片段,每个状态都有一个名称、一个动画、一些参数和一些设置。转换条件指示Animator何时应该从一个状态切换到另一个状态。这些条件可以是像速度、位置或其他条件。 在Animator状态机中,我们可以添加动画状态、行为状态、转换条件和逻辑控制节点。动画状态,可以是AnimationClip动画,也可以是BlendTree层级化混合动画,这些都是状态集合。行为状态,相当于一个事件触发机制,指定各种触发条件,使得AnimatorStateMachine能够更加智能、灵活地处理动画切换。转换条件,告诉它何时去切换到另一个状态。逻辑控制节点,可以通过判断条件来控制Animator state machine的逻辑。 总之,unity animator动画状态机是非常强大的动画开发工具,提供了多个状态和转换条件,允许开发人员完全掌控游戏对象的动画状态。它提供了一种更加直观的流程,通过图形界面创建动画状态流程,复杂的游戏逻辑也更更加高效和易于理解。 ### 回答3: Unity Animator动画状态机Unity引擎中的一个核心组件,用于给游戏对象添加动态的动画效果。Animator状态机本质上是一种有限状态机(FSM),它可以将对象的状态从一种状态切换到另一种状态,例如从静止状态到跳跃状态,或从跳跃状态到攻击状态。Animator状态机的主要功能是让设计师和开发者创建和控制游戏对象的动画,并可以轻松地将动画与对象的其他行为和属性绑定在一起。 使用Animator状态机可以让游戏设计师和开发者更加灵活和高效地创建动画。Animator状态机由以下四个基本元素组成: 1. Animator Controller:Animator状态机的中央控制器,用于管理Animator状态机中的多个状态以及它们之间的转换。 2. Animator State:Animator状态机中的单个状态,代表了一个游戏对象的动画状态,例如跳跃、奔跑等。 3. Transition:表示状态之间的过渡,可以设置触发条件和过渡时间等参数。 4. Parameter:可以控制Animator状态机中的状态转换,例如可以添加一个触发参数来控制状态转换的时机。 在Unity中创建一个Animator状态机非常简单,只需在Assets文件夹中创建一个Animator Controller文件,然后将其拖拽到一个游戏对象的Animator组件上即可。完成后就可以使用Animator状态机中的多种元素来创建自己的动画了。 总之,Unity Animator动画状态机是一种强大的游戏开发工具,它为游戏设计师和开发者提供了非常灵活和高效的动画创建和控制方式,可以让游戏对象展现更生动的动态效果,提高游戏的可玩性和视觉效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值