首先我们定一下不同速度对应的行人动作状态,设计为四种状态:
- 静止站立Stand:0~maxStandSpeed
- 走路Walk:minWalkSpeed~maxWalkSpeed
- 慢跑Jog:minJogSpeed~maxJogSpeed
- 快跑Run:大于MinRunSpeed
我们可以使用Animator组件实现行人的不同动画,可以设计为如下行人动画状态机:
并通过速度做动画的切换,其中Animator有一个方便之处是不同动画之间切换的过渡是可以通过Transitions来实现,这样动画之间切换就不会突兀。
此外,在Walk, Jog, Run这三个动画中,还可以根据行人速度调整动画自身的速度Speed。在Unity editor中动画速度在如下图中调整(默认为1),也可以代码动态调整。
然后我们将行人的速度映射为动画的速度,可以采用归一化映射方法:
映射公式如下:
y
=
y
m
i
n
+
y
m
a
x
−
y
m
i
n
x
m
a
x
−
x
m
i
n
∗
(
x
−
x
m
i
n
)
y = y_{min} + \frac{y_{max} - y_{min}}{x_{max} - x_{min}} * (x - x_{min})
y=ymin+xmax−xminymax−ymin∗(x−xmin),
其中,
y
m
a
x
y_{max}
ymax为要映射的目标区间最大值,
y
m
i
n
y_{min}
ymin为要映射的目标区间最小值,
x
m
a
x
x_{max}
xmax为数据的最大值,
x
m
i
n
x_{min}
xmin为数据的最小值,
x
x
x为当前数据值,
y
y
y为归一化映射后的值。
将映射后的值调整到动画上的速度就可以根据行人速度动态调整动画的速度