update与fixedupdate检测键盘输入的出现的问题
先看看二者的区别
unity默认设置中,fixedupdate调用频率为50,在这个情况下,它的调用次数一般是比update要高的。
同:当MonoBehaviour启用时,其在每一帧被调用。都是用来更新的
异:Update()每一帧的时间不固定,即第一帧与第二帧的时间t1和第三帧与第四帧的时间t2不一定相同。FixedUpdate()每帧与每帧之间相差的时间是固定的.
Update:
每帧需要更新的逻辑在Update函数里调用
LateUpdate:
是当Update调用结束,并且渲染逻辑调用完,才会调用LateUpdate,所以当渲染结束后,需要更新状态的逻辑可以放到LateUpdate。
是当Update调用结束,并且LateUpdate调用完,才会调用渲染逻辑,所以当Update结束后,需要更新的逻辑可以放到LateUpdate中。
FixedUpdate:
精确计时需要用到FixedUpdate,因为FixedTime是定值,无论每一帧调用花费多少时间,到FixedUpdate调用时都会按照FixedTime来决定调用次数。因为程序每一帧渲染的时间是不能确定的。
在FixedUpdate中放入检测键盘输入会出现奇怪的问题,将FixedUpdate的调用频率设置的越高问题越明显。
如:
由于Input.GetKeyDown(KeyCode.K)只有在按下k键的那一刻才为true,才会输出“K键被按下”,但是当你按下以此k键后,它可能会输出1次或2次,甚至3、4次“K键被按下”,又或者检测不到按键,这就会造成很大的问题了。经过测试可以发现输出多次是因为上一次调用时Input.GetKeyDown(KeyCode.K)是true,但是在下一刻调用时,虽然没有按下K键,但是Input.GetKeyDown(KeyCode.K)还是true。
而放在Update中就不会出现这种问题。
虽然update执行频率看起来不高,但是对于执行随时都需要检测的东西效果倒是非常好。因此,像这种随时可能需要检测的东西,应该放在update之中。