赞
踩
Animation动画状态机:是旧版的动画状态机
Animator动画状态机:是新版的动画状态机,其实就是由Animation组成的(这里我们常用这个)
(1)从网上找的3D模型FBX文件,包括了模型的动画文件,模型材质等,是一个完整的资源(自带Animator)。这里我们用的人形模型。新建unity工程,将模型文件导到Assets目录。选中模型,在Inspector窗体可见:
Rig里我们可以设置动画类型,默认设为Generic。如果是要使用Mecanim提供的动画retargeting等功能,那就需要将动画类型设为Humanoid。要设置循环播放该动画,勾选Animations里Loop Time即可。
这里要想动画在运行后动,那就要将动画预制物的属性修改为Humanoid 如下图:
(2)准备好模型后,创建一个动画控制器Animator Controller(如果是Legacy动画模式,不需要创建动画控制器。Legacy是4.0版本前的标准动画模式,功能较弱,使用也简单)。
(3)把模型拖到Scene里,给模型Animator组件的Controller指定动画控制器。如需使用脚本控制模型位置,取消Apply Root Motion选项。
(4)打开Animator窗口(双击动画控制器可以打开Animator窗口),将之前导入的模型相关动画拖入窗口(将对应动画片段拖入生成新节点,就可以编辑了)。
Entry(绿色节点):表示当进入当前状态机时的入口,该状态连接的状态会成为进入状态机后的第一个状态;
橙色节点:相当于旧动画系统的默认片段(新建的第一个节点默认为橙色,自动与 Entry 连接,成为进入状态机后的第一个状态);
Any State:表示任意的状态,其作用是其指向的状态是在任意时刻都可以切换过去的状态;
Exit:表示退出当前的状态机,如果有任意状态指向该出口,表示可以从指定状态退出当前的状态机;
灰色节点:
设置默认片段
建立基础连线
箭头代表两个动画的过渡
任何状态都可以连线到death,甚至包括自己到自己
取消death过渡到自己的选择
建立过渡条件,添加参数,有4种(用来方便通过代码激活参数,实现动画切换)
默认过渡条件:Has Exit Time,播放完当前动画才会进行到下一动画的过渡。当有条件时,取消勾选;无条件,默认勾选
最后给游戏物体添加脚本,控制参数的激活
案例:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class gangcancel : MonoBehaviour
- {
- private Animator anim;
- // Start is called before the first frame update
- void Start()
- {
- anim = this.GetComponent<Animator>();
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.N))
- {
- anim.SetTrigger("New Trigger"); //由dance1转到dance2
- }
- if (Input.GetKeyUp(KeyCode.M))
- {
- anim.SetTrigger("2");//由dance2转到dance1
- }
- }
- }
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class catcancel : MonoBehaviour
- {
- private Animator anim;
- public int jumpPower = 200;
- public int speed = 2;
- private Rigidbody rig;
-
- private Transform t;
-
- // Start is called before the first frame update
- void Start()
- {
- anim = this.GetComponent<Animator>();
- rig = this.GetComponent<Rigidbody>();
-
- t = this.GetComponent<Transform>(); //获取本身和所有子子物体
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- if (Input.GetKeyDown(KeyCode.Space))
- {
- anim.SetTrigger("jump");
- rig.AddForce(transform.up * jumpPower);
-
- }
- if (Input.GetKey(KeyCode.W)) //当按下W键时,向前移动
- {
- t.Translate(t.forward * Time.deltaTime * speed);
- anim.SetFloat("speed", 2);
- }
- if (Input.GetKeyUp(KeyCode.W))
- {
- anim.SetFloat("speed", 0);
- }
-
- if (Input.GetKey(KeyCode.S))//当按下S键时,向后移动
- {
- t.Translate(-t.forward * Time.deltaTime * speed);
- anim.SetFloat("speed", 2);
- }
- if (Input.GetKeyUp(KeyCode.S))
- {
- anim.SetFloat("speed", 0);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。