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

浙公网安备 33010602011771号