在实际速度、动画上都要体现过渡
在这之前已经实现了两个简单动画以及Blend动画和简答动画之间的过渡,但是Blend动画序列之间是硬切的,需要给权重一个渐变值来实现内部的平滑过渡(现在的走路、跑步动画合并为一个BLend动画控制)。
首先我们要提供一个动画和移动速度的过渡速度量,再把原来玩家配置中的WalkSpeed扩展出RunSpeed用于速度区分。
# Player_Controller类
public float RunSpeed { get => warriorConfig.RunSpeed; }
public float Walk2RunTransitionSpeed { get => warriorConfig.Walk2RunTransitionSpeed; }
# WarriorConfig类
public float WalkSpeed;
public float RunSpeed;
public float Walk2RunTransitionSpeed;
在Player_MoveState中控制动画和速度过渡。
//处理移动
Vector3 input = new Vector3(h, 0, v);
if (Input.GetKey(KeyCode.LeftShift))
{
runTransition = Mathf.Clamp(runTransition + Time.deltaTime * player.Walk2RunTransitionSpeed, 0, 1);
}
else
{
runTransition = Mathf.Clamp(runTransition - Time.deltaTime * player.Walk2RunTransitionSpeed, 0, 1);
}
player.SetBlendAnimationWeight(1 - runTransition);
在玩家移动,由走到跑时,渐变量应该正向增加,相反则递减,在设置二者权重时,走到跑渐变量由0到1,对应1端口的权重应该由1到0,所以1-。
float speed = Mathf.Lerp(player.WalkSpeed,player.RunSpeed,runTransition);
对应玩家的速度也应该在走跑之间根据渐变量进行过渡。
效果如下,这里过渡的速度设置的很大,可以很明显看到玩家动画和移动速度的快速转变。