在Unity游戏开发中,处理外部输入设备是一大模块。一个游戏有可能是键盘作为输入,也可能是手柄作为输入,有可能是VR、AR头盔,也有可能是其他设备输入。但是这些输入在游戏代码中,最终都要装换成有范围的数值来表示。记录一下将输入转换为(-1,1)的方法。
这里以键盘输入为例,控制角色的行走,我先获取指定键码的输入:
public string keyForward = "D";
public string keyBack = "A";
//声明一个float,作为转换后的值
public float run;
void OnUpdate(){
run= (Input.GetKey(keyForward) ? 1.0f : 0) - (Input.GetKey(keyBack) ? 1.0f : 0);
Debug.log(run);
}
这样,我们就把获得的键码值转换成数字-1和1,这样就可以判断run做出相应的逻辑。
但是我们发现,这样应用范围并不广,因为我们在控制角色的时候,要求有一个渐变的过程,比如控制奔跑动画,根据渐变来控制混合树的动画切换。我们在此基础上改进一下,使其效果和Unity的[Input.GetAxis()][6]方法差不多。
private string keyForward = "D";
private string keyBack = "A";
private float run;
private float targetRun;
private float runCache;
void OnUpdate(){
run= (Input.GetKey(keyForward) ? 1.0f : 0) - (Input.GetKey(keyBack) ? 1.0f : 0);
//实现(-1,1)的平滑过渡
targetRun = Mathf.SmoothDamp(targetRun , run, ref runCache, 0.5f);
Debug.log(targetRun );
当我们按下按键的时候,可以看到targetRun在-1到1之间平滑过渡;不按按键的时候,targetRun的值在(-1,1)之外变化。