每一个动画状态都演绎着你的奔赴。
动画混合
1) 前往 Mixamo选择适合的角色模型和idle/walking/backward动画并下载。确保下载时选择FBX for Unity格式。
2) 新建Unity项目,导入下载的模型。
3) 在导入模型的Inspector窗口中,选择Materials选项卡,解压纹理和材质。
4) 在带有模型的动画中,设置Rig为Humanoid,选择Avatar Definition设置为Create From This Model,并检查是否正确并保存。
5) 其他动画也设置Rig为Humanoid,并设置Avatar为上个步骤中保存的Avatar。
6) 勾选所有动画的Loop Time,使得动画可以循环播放。
7) 创建并打开Animator Controller,然后新建BlendTree,将参数设置为Floatl类型的Speed,在Motion的列表中前述添加3个动画,将动画切换参数设置为Speed,并将Threshold的值分别设置为-1(后退)/0(空闲)/1(前进)。
8) 将模型添加到场景中并改名为Player,给模型增加Animator组件,并将控制器设置为上个步骤中创建的的Animator Controller。
先登录网站下好模型动画,然后导入。接着按步骤弄好材质跟绑定。再到动画状态机,这个比较重要。
双击controller进入动画状态机,你会看到三个框,菜单有layers跟parameters。新建一个混合树状态及设置一个speed参数,注意这里的参数可用来调状态的。
接着双击新建好的混合树,点进去设置motion。
可以点击运行去改变speed值,动画状态发生的改变。当然实际不会一直让你在那调,所以写脚本根据输入控制speed参数,来调整动画的状态。在动画中混合树可以根据参数,混合多个动画,每个动画有不同的权重,这样就有了很多中间状态。当然不想混合几个行为便可以是动画过渡。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 2.0f;
private Animator animator;
void Start()
{
animator = GetComponent<Animator>();//获取当前游戏对象上的 Animator 组件
}
void Update()
{
float move = Input.GetAxis("Vertical");//获取垂直方向上的输入值
animator.SetFloat("Speed", move);//将移动值 move 设置给 Animator 控制器中名为 "Speed" 的参数,用于控制动画播放速度
Vector3 movement = new Vector3(0, 0, move);
transform.Translate(movement * speed * Time.deltaTime);//根据移动向量 movement、移动速度 speed 和时间间隔 Time.deltaTime 来更新游戏对象的位置
}
}
移动过程你会发现是有混合效果的。
实验心得
他总是把最好的糟蹋完后,才开始感概人生若只初见。