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)之外变化。

posted @ 2019-07-04 17:27  桬椤  阅读(394)  评论(0)    收藏  举报