以单位/秒表示 Ruby 的移动速度
时间和帧率
目前,Unity 每秒至少渲染 60 帧。让我们调整此设置:
1.在代码编辑器中,将以下两行添加到 Start 函数中:
public class RubyController : MonoBehaviour { // 在第一次帧更新之前调用 Start void Start() { QualitySettings.vSyncCount = 0; Application.targetFrameRate = 10; } // 每帧调用一次 Update void Update() { float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector2 position = transform.position; position.x = position.x + 0.1f * horizontal; position.y = position.y + 0.1f * vertical; transform.position = position; } }
经过此调整后,Unity 将每秒渲染 10 帧。
2.返回到 Unity 编辑器。
3.按下 Play 按钮以进入运行模式。 4.尝试移动 Ruby。你现在可能会感觉游戏很慢,并且 Ruby 的行动速度大大降低。
为什么会这样?
如果查看代码,你会发现每次 Unity 调用 Update 函数时,都会将 Ruby 移动 0.1 个单位,这意味着在每一帧:
position.x = position.x + 0.1f * horizontal;
如果游戏以每秒 60 帧的速度运行,那么 Ruby 将移动 0.1 * 60,因此每秒移动 6 个单位。但是,如果游戏以每秒 10 帧的速度运行,就像刚刚让游戏运行的那样,
那么 Ruby 仅移动 0.1 * 10,因此每秒移动 1 个单位! 如果一个玩家的计算机非常陈旧,只能以每秒 30 帧的速度运行游戏,而另一个玩家的计算机能以每秒 120 帧的速度运行游戏,
那么这两个玩家的主角的移动速度会有很大差异。这样就会使游戏的难易程度提高或降低,具体取决于运行游戏的计算机。
要解决此问题,你需要以单位/秒来表示 Ruby 的移动速度,而不是采用单位/帧(目前采用此设置)。
为此,你需要通过将移动速度乘以 Unity 渲染一帧所需的时间来更改移动速度。如果游戏以每秒 10 帧的速度运行,则每帧耗时 0.1 秒。如果游戏以每秒 60 帧的速度运行,则每帧耗时 0.017 秒。
如果将移动速度乘以该时间值,则移动速度将以秒表示。
public class RubyController : MonoBehaviour { // 在第一次帧更新之前调用 Start void Start() { //QualitySettings.vSyncCount = 0; //Application.targetFrameRate = 10; } // 每帧调用一次 Update void Update() { float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector2 position = transform.position; position.x = position.x + 0.1f * horizontal * Time.deltaTime; position.y = position.y + 0.1f * vertical * Time.deltaTime; transform.position = position; } }
public class RubyController : MonoBehaviour { // 在第一次帧更新之前调用 Start void Start() { } // 每帧调用一次 Update void Update() { float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector2 position = transform.position; position.x = position.x + 3.0f * horizontal * Time.deltaTime; position.y = position.y + 3.0f * vertical * Time.deltaTime; transform.position = position; } }
浙公网安备 33010602011771号