如何为塔防游戏(如http://fieldrunners.com/和其他TD游戏)实现快进功能?
我正在使用Unity 3D。是否会有某种方法来管理每秒更少的帧,或者某种手动设置的敌人快速移动和发射塔的速度等等?
如何为塔防游戏(如http://fieldrunners.com/和其他TD游戏)实现快进功能?
我正在使用Unity 3D。是否会有某种方法来管理每秒更少的帧,或者某种手动设置的敌人快速移动和发射塔的速度等等?
Answers:
如果您的游戏没有复杂的或计算量大的仿真,需要将它们分成独立的更新时间轴,则可以使用一种简单的方法将代码Update()
基于Unity的Time.time值放在函数中,并在代码中设置Time的值.timeScale可以随心所欲。0 ==暂停,1 =正常,我们的测试人员喜欢将timeScale> 1设置为更快地完成工作。
http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html
方法:更高的仿真率
用户界面的时间安排应与实际游戏循环脱钩,渲染也应与之隔离。假设您的世界以4倍的速度运行。可以说,以您的基本(1x)速度,您的游戏每秒运行30次更新。
在快进模式下,您将获得以下内容:
换句话说,整个游戏的运行速度并不快。该模拟部分。
您可以从中推断出两件事:
你需要保持你的游戏逻辑很简单,你可以轻松地在目标平台上将其运行四倍,或者您需要引入一些方法来更快地推断游戏玩法的各个方面-但是,这可能会导致模型与您仅使用速度更快的模拟的情况不同。因此,权衡是为了准确性而需要处理成本。请参阅下面的方法2。
关注点的分离使您可以轻松地加速世界模拟,该分离即模型,视图和控制器(MVC)。如果您的世界数据(M),渲染逻辑(V)和游戏逻辑(C)混合在一起,那么您实际上将无法做到这一点,至少在没有严重偏头痛的情况下。
方法:基于时间增量的推断
如上所述,您需要根据给定时间内某物体行进了多远来计算运动。假设您的游戏物理性在本质上在模拟中更加逼真,但是事实并非如此。这是一个相当大的话题,而且相当复杂。您需要问更多有关是否想知道的问题。本质上,您将进行一些演算来使事情变得正确。您将需要处理冲突中的互穿以及其他许多我不会在这里讨论的问题。
总结一下
这为您提供了总体轮廓。您的语言选择是您自己的,大概是您知道如何在Unity中做到这一点,或者您不知道。任何语言的时间安排都需要您详细了解来龙去脉,我建议从Gaffer的文章开始,并查看Unity API文档。
作为一般原则,游戏逻辑的更新应与游戏图形的更新脱钩-也就是说,不应将模拟游戏玩法,AI,单位移动等与游戏渲染的速度联系在一起。通常,主游戏循环会计算自上次游戏更新以来已过去了多少实时时间,并将该增量时间步发送到每个单独游戏逻辑对象的更新例程。
在这种情况下,在游戏中实现时间缩放(包括快速转发)变得很简单。只需将游戏逻辑时间步长乘以某个标量值即可,该标量值控制“快进”或慢下来的时间量。默认情况下,该值为1,例如,一旦用户按下“快进”键,则将其设置为1.5,并且所有模拟的执行速度似乎会提高50%。但是,您仍将以相同的速率渲染。
我对Unity并不是很熟悉,因此在以下建议中可能是错误的,但是Unity确实具有时间管理组件,该组件可能对实现这一点很有用。实际上,它已经具有时间刻度属性。组件的描述暗示该类是为物理对象设计的,但它也可能适用于您的方案。