Unity 2d人物移动手感 记录

GetAxis 与 GetAxisRaw 对人物跳跃的手感影响

问题:这两个方法在人物移动、跳跃的时候,究竟有什么区别



一、方法介绍以及水平移动区别

(1)GetAxis()
官方文档:Returns the value of the virtual axis identified by axisName.

The value will be in the range -1…1 for keyboard and joystick input. If the axis is setup to be delta mouse movement, the mouse delta is multiplied by the axis sensitivity and the range is not -1…1.

This is frame-rate independent; you do not need to be concerned about varying frame-rates when using this value.

不受帧率影响的固定增量输入,测试一下:
FixedUpdate() 里:
Unity 2d人物移动手感 记录
一直按键盘往右移动的按键 ,其输入值为: 0.09848849,0.1483968,0.2129478, 0.265797,0.3168564,0.3929469…

其增量为0.05左右,为什么是这个值呢?

Update() 里:
Unity 2d人物移动手感 记录
其增量为0.018左右

试着输出一下 FixUpdate() 函数和 Update() 函数的 Time.deltaTime
Unity 2d人物移动手感 记录
可以看出来执行3次Update 就会执行一次FixedUpdate,每过0.02s 增加0.05,增加到1 则需要0.4s,1秒钟增加2.5

Unity 2d人物移动手感 记录
看到灵敏度为1秒 移动3个单元, 尝试修改其为6,再看看FiedUpdate增量是多少:
Unity 2d人物移动手感 记录
每过0.02s增加0.12,增加到1需要 0.17s左右;1秒钟增加6左右

结论:这个增量确实与帧率无关,只与键盘输入的灵敏度有关;
设置该方法,可以让人物的水平移动 具有惯性,给了按键输入的增量(加速度)作为加速和缓存


(2)GetAxisRaw()
这个就不用测试了,对于键盘的输入都是1;可以让人物的移动更加稳定,反馈更加迅速

二、跳跃区别

为了显示跳跃的不同,给player的地面检测点 groundpoint 增加了lineRender,从而可以观察 跳跃时的运动轨迹
运动轨迹方法链接

跳起来的时候 GetAxis()方法如下图: 此时一直按着左键往左跳

Unity 2d人物移动手感 记录
其完整轨迹如下:
Unity 2d人物移动手感 记录

而GetAxisRaw() 方法 轨迹如下:
Unity 2d人物移动手感 记录


再次比较从同一个平台下落时的轨迹: 此时一直按着右键下落
Unity 2d人物移动手感 记录


可以看出,两种方法在人物起跳、下落的时候的移动速度可能是不一样的,因此会有不同的运动轨迹,这也会带来不一样的手感。
1、GetAxisRaw方法有着一直获取最大输入的特点,从下落的抛物线可以看出,GetAxisRaw方法有着更大的跳跃空间

2、所以 GetAxis方法的跳跃 相比于 GetAxisRaw 可能更符合物理运动,其跳跃过程也相对来说比较笨重。

3、GetAxisRaw方法在跳跃时的转向 反馈更加迅速

总结

以上只是个人对 这两个方法在水平移动和 跳跃 两个过程的手感测试,可能会存在一些错误,欢迎指正交流!