为何要帧率独立
在 01中我们会发现在更高的帧数下人物移动会更快,这是因为update函数每帧调用一次,更高的帧数下调用更快,因此人物移动过更快。因此我要让游戏在不同的平台上以相同的速度运行,不管玩家的帧率是多少。
解决方法
我们当然拥有多种方法解决这个问题,在这里,我们使用Time.delatTime。
在找到计算移动的指令后,做如下调整:
Vector2 position = (Vector2)transform.position + move * 0.1f * Time.deltaTime;
以下是全代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.InputSystem;
using UnityEngine;
using static UnityEditor.Searcher.SearcherWindow.Alignment;
public class Player : MonoBehaviour
{
public InputAction MoveAction;//创建一个InputAction变量,创建引用
void Start()
{
MoveAction.Enable();//启用MoveAction输入动作,所有的动作都是默认禁用的,记得启用
}
// Update is called once per frame
void Update()
{
//--------------------------使用输入系统包(input Actions)控制玩家移动----------------------------
Vector2 move = MoveAction.ReadValue<Vector2>();
Vector2 position = (Vector2)transform.position + move * 0.1f * Time.deltaTime;//乘Time.deltaTime以保证帧率独立
transform.position = position;
}
}
当然在修改完代码后我们发现人物的移动速度缓慢,只要修改0.1f为你想要的大小就行了。
原理解释
帧率为60fps的平均增量时间为0.017秒,因为1/60大约等于0.017s。每帧移动0.1f* 0.017 = 0.0017个单位。在60帧后(即1秒的时间),GameObject将前进0.0017个单位60次。0.0017*60大约等于(~=)0.1个单位。
如果游戏以10fps的帧率运行,那么deltaTime将是0.1s(1/10 = 0.1)。
0.1 * 0.1 = 0.01单位移动帧。在10帧(1秒的时间)后,GameObject仍然会移动0.01*10 = 0.1个单位。
当你使用Time.deltaTime时,无论帧率是多少,玩家角色每秒都会移动相同的量。