在Unity中,游戏刷新的帧率不同会导致物体运动的速度不同,这是因为物体的运动速度是按照时间来计算的。
在Unity中,物体的运动位移是通过以下公式来计算的:
移动距离 = 速度 * 时间
按照通常情况,我们会将时间中融入一个帧间隔时间用来协调不同帧率的速度。
this.transform.Translate(Vector3.forward * Input.GetAxis("Vertical") * Time.deltaTime * walkspeed, Space.World); //逻辑前进
如果不使用 Time.deltaTime 而是选择将时间写入一个常数m,那么假设速度是1,在30fps和500fps的终端设备上,就会产生30m和500m两种位移。因为30fps代表着每过1s刷新30次,此时移动距离就是30个“小位移”的总和。而500fps使用的是同样规格的“小位移”,却在1s内执行了500次,速度看上去自然要快于30fps设备。
.
当然,要解决这个问题,除了使用 Time.deltaTime ,还可以采取固定帧率的方法。具体选用何种方法处理需要看具体需求。