1.具体实现
- 逐步更新一个动画混合参数(Blend),使其平滑地过渡到目标值,可以实现角色动作的平滑过渡,比如从走路过渡到跑步。
private float currentBleng;private float targetBlend;public float accelerSpeed = 5;//逐步更新d动画混合参数(Blend),使其平滑地过渡到目标值。通过这种方式,可以实现角色动作的平滑过渡,比如从走路过渡到跑步private void UpdateMixBlend(){if (Mathf.Abs(currentBleng - targetBlend) < ConstName.accelerSpeed * Time.deltaTime){currentBleng = targetBlend;}//如果当前混合值大于目标混合值,则以 accelerSpeed * Time.deltaTime 的速率递减 currentBlend。else if (currentBleng>targetBlend){currentBleng -= accelerSpeed * Time.deltaTime;}else{currentBleng += accelerSpeed * Time.deltaTime;}ani.SetFloat("Blend", currentBleng);}
2.关键概念和步骤:
2.1平滑过渡判断
if (Mathf.Abs(currentBlend - targetBlend) < ConstName.accelerSpeed * Time.deltaTime) { currentBlend = targetBlend; }
- 使用
Mathf.Abs
计算当前混合值 currentBlend
和目标混合值 targetBlend
之间的绝对差距。 - 如果差距小于一定阈值(
ConstName.accelerSpeed * Time.deltaTime
),则直接将 currentBlend
设置为 targetBlend
,以避免过小的增量带来的抖动。
2.2递减或递增 currentBlend:
else if (currentBleng>targetBlend){currentBleng -= accelerSpeed * Time.deltaTime;}else{currentBleng += accelerSpeed * Time.deltaTime;}
- 如果
currentBlend
大于 targetBlend
,则以加速速度递减 currentBlend
- 如果
currentBlend
小于 targetBlend
,加速速度递减递增 currentBlend
2.3更新动画参数
ani.SetFloat("Blend", currentBleng);
- 将计算后的
currentBlend
值设置到动画控制器中的 Blend
参数上,使动画参数平滑过渡到目标值