如何在游戏中实现“快进”功能?


15

如何为塔防游戏(如http://fieldrunners.com/和其他TD游戏)实现快进功能?

我正在使用Unity 3D。是否会有某种方法来管理每秒更少的帧,或者某种手动设置的敌人快速移动和发射塔的速度等等?


您是否尝试过增加更新频率?您可能需要跳帧..
concept3d

Answers:



18

方法:更高的仿真率

用户界面的时间安排应与实际游戏循环脱钩,渲染也应与之隔离。假设您的世界以4倍的速度运行。可以说,以您的基本(1x)速度,您的游戏每秒运行30次更新。

在快进模式下,您将获得以下内容:

  • 世界逻辑为UI和渲染器的每个更新运行4个更新。这意味着它需要每秒运行120个更新。因此,您的世界模型(数据)将以此速率更新。
  • 渲染器和UI逻辑均以每秒30次更新的速度继续轮询或执行任何操作。

换句话说,整个游戏的运行速度并不快。该模拟部分。

您可以从中推断出两件事:

  1. 你需要保持你的游戏逻辑很简单,你可以轻松地在目标平台上将其运行四倍,或者您需要引入一些方法来更快地推断游戏玩法的各个方面-但是,这可能会导致模型与您仅使用速度更快的模拟的情况不同。因此,权衡是为了准确性而需要处理成本。请参阅下面的方法2。

  2. 关注点的分离使您可以轻松地加速世界模拟,该分离即模型,视图和控制器(MVC)。如果您的世界数据(M),渲染逻辑(V)和游戏逻辑(C)混合在一起,那么您实际上将无法做到这一点,至少在没有严重偏头痛的情况下。

方法:基于时间增量的推断

如上所述,您需要根据给定时间内某物体行进了多远来计算运动。假设您的游戏物理性在本质上在模拟中更加逼真,但是事实并非如此。这是一个相当大的话题,而且相当复杂。您需要问更多有关是否想知道的问题。本质上,您将进行一些演算来使事情变得正确。您将需要处理冲突中的互穿以及其他许多我不会在这里讨论的问题。

总结一下

这为您提供了总体轮廓。您的语言选择是您自己的,大概是您知道如何在Unity中做到这一点,或者您不知道。任何语言的时间安排都需要您详细了解来龙去脉,我建议从Gaffer的文章开始,并查看Unity API文档。


如果你要使用更高的仿真速度的方法,并要支持经济放缓,您可能需要实际有一个极其缓慢的基地模拟速度,然后在像100模拟步/帧运行,默认情况下。
bobobobo

9

作为一般原则,游戏逻辑的更新应与游戏图形的更新脱钩-也就是说,不应将模拟游戏玩法,AI,单位移动等与游戏渲染的速度联系在一起。通常,主游戏循环会计算自上次游戏更新以来已过去了多少实时时间,并将该增量时间步发送到每个单独游戏逻辑对象的更新例程。

在这种情况下,在游戏中实现时间缩放(包括快速转发)变得很简单。只需将游戏逻辑时间步长乘以某个标量值即可,该标量值控制“快进”或慢下来的时间量。默认情况下,该值为1,例如,一旦用户按下“快进”键,则将其设置为1.5,并且所有模拟的执行速度似乎会提高50%。但是,您仍将以相同的速率渲染。

我对Unity并不是很熟悉,因此在以下建议中可能是错误的,但是Unity确实具有时间管理组件,该组件可能对实现这一点很有用。实际上,它已经具有时间刻度属性。组件的描述暗示该类是为物理对象设计的,但它也可能适用于您的方案。


1
这绝对适用于他的场景。他所需要做的就是将Time.timeScale设置为某个乘数,一切都会变得更快。这是一个全面的变化,因此,如果发生菜单交互之类的事情,它们的运行速度也会更快。
四分

再次thnx Tetrad :)
Syed
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.