关于跳跃手感的解决
角色跳跃功能一直是RPG游戏的核心玩法,不同机器每秒的执行帧数是不相同的,配置越高的机器每秒执行的帧数越高。在Unity中,为了兼容不同配置的机器,提供了两个函数Updata和FixedUpdata。Updata函数每一帧被调用一次,这也就导致了低配机器每秒的调用次数不足,使得操作不灵敏。FixedUpdata固定每0.02秒执行一次,可以很好的兼顾各种配置的机器。这样就引出了一个常用的解决办法,虽然低配机器Updata执行次数不足,但是不是固定执行,所以Updata函数中可以马上获得玩家按下按键的操作。Unity手册中也明确指出了Input.GetButton和Input.GetButtonDown这类有关于按键检测的函数需要放在Updata中去执行,这样能够得到实时的反馈。而所有与物理效果有关的仿真模拟需要放在FixedUpdata中执行,因为物体移动需要持续稳定的推力,对执行频率更加敏感,所以在这个项目中,需要先在Updata中获得按键信息,再去FixedUpdata中执行代码,以此获得较好的跳跃手感。例如:
Update()
{
if(Input.GetButtonDown("Jump"))
jumpPressed = true;
}
FixedUpdate()
{
if(jumpPressed = true)
DoubleJump();
}
这样当玩家按下跳跃键时,先会执行Updata获取已经按下跳跃键的信息,然后固定执行FixedUpdata,达到几乎无延迟的跳跃效果。这也是实现帧同步的关键步骤。但是这个方案也并不完美,因接收频率过高或者过低时,固定执行的FixedUpdata可能会出现响应多次或者响应过少的情况,本人做到这一步已经完美解决跳跃手感问题,故没有进行下一步研究改进。