使用Unity3D引擎。我使用Unity的标准网络制作多人游戏以获得乐趣。如果服务器拥有25-50名玩家,建议使用哪种地图尺寸?在它对于有效的游戏玩法来说太大之前,我可以制作一个非常详细的地图有多大?如何优化大型地图?任何想法和建议都会很棒,我只想学习,但在谷歌上找不到任何相关内容:D
*我的地图被分成不同的部分。
答案 0 :(得分:5)
地图本身的大小(以单位为单位)对性能无关紧要。请记住,Unity(与任何其他游戏引擎一样)使用浮点数来表示几何,当浮点值过高或过低时,things can get funny。
重要的是您的逻辑,网络和渲染引擎必须经历的数据量。这些是不同的东西,甚至是逻辑/网络数据,对这些数据的限制在很大程度上取决于游戏的架构。
允许'谈论网络。在那里,两个参数对您的限制至关重要:带宽和延迟。带宽是您可以传输多少数据,延迟是多快。好的,这个解释令人困惑。想象一辆卡车装满了从一个城市到另一个城市的硬盘驱动器:它拥有巨大的带宽,您可以通过这种方式传输整个数据中心。但是信号传播的等待时间是几个小时。另一方面,来自这些城市的两个不同的人可以跳上气球,在夜空中看着对方并打开和关闭手电筒。通过这种方式,他们只能交换一点信息,但延迟时间最短:你不能比光更快。
这还取决于您的网络如何运作。例如,RTS游戏通常使用锁步多人游戏架构,可以在数千个单元上运行,但只会在用户之间交换有限数量的数据:他们的输入命令。另一方面,第一人称射击游戏很大程度上依赖于延迟(锁定踩踏可能会造成伤害):当你跳跃并发射火箭发射器时,10毫秒比你说你的部队攻击要重要得多。因此,网络逻辑的组织方式不同:每个玩家的计算机预测会发生什么,但中央服务器对实际发生的事情有权威。当然,我现在正在写的只是可以使用的架构的一般例子;选择正确的方式进行联网是非常困难的,但非常有趣和创造性的任务。
现在,逻辑本身。实际上,现代游戏中使用的大多数游戏逻辑在cpu要求方面都相对简单,除非它的物理或AI。在多人游戏中使用物理对它来说是非常棘手的,因为同步问题(记得花车?);通常,可以影响谁胜谁输的实际逻辑非常简单:水平几何是完全静态的,角色使用简单的逻辑移动而没有真正的物理力,物理通常仅限于碰撞检测。当然,你会看到许多以物理为基础的视觉效果:被杀死的敌人摔倒,爆炸时起伏不定;但这些通常在不同的计算机之间不同步,并且实际上不会影响游戏本身。
最后,渲染。在这里,存在许多不同的约束。要告诉他们所有这些,我将不得不在不同的设备上描述Unity的整个渲染管道,这显然超出了这个问题的范围。谢天谢地,还有另一种方式!而不是在理论上推理这个限制,而只是一个实际的原型。在场景中放入不同的游戏资源,在目标设备上运行它并查看它的执行情况。调整,重复!这些游戏资产可能完全丑陋或无关紧要;但是,它们必须具有与您在真实游戏中使用的技术属性相同的技术属性:多边形的数量,纹理的大小,着色器等等。例如,让我们说,例如,你想创建一个类似COD的多人射击游戏。为了提出你的渲染要求,只需要使用N个多边形纹理放入N个环境模型,使用NxN纹理,在N个字符中添加一些带有N个骨骼的骨架动画,并且不要忘记一些可以模拟CPU的虚假逻辑 - 伸展的东西,所以你的性能测量将更加真实。当然,它不会给你最后的图片,但它是一个很好的开始方式,在你开始制作大量的艺术资产之前,这样做很棒。
总的来说,游戏性能优化是一个非常广泛和有趣的主题,并且无法对这样的问题给出准确的答案。
答案 1 :(得分:0)
您可以改进这一点,减少相机的剪裁平面以减少可见的渲染距离,也可以使用LOD改进使您的切片部分具有细微的细节。 有关LOD的详细信息,请查看此链接:
http://docs.unity3d.com/Manual/class-LODGroup.html
如果您需要更多改进,可以制作一个脚本,根据玩家的距离在运行时加载地形。
答案 2 :(得分:0)
首先:让游戏更加有效,以后再进行优化。过早优化是浪费程序员的时间。
其次:想想天际和我的世界。当你四处移动时,世界被分成在背景中加载的碎片。使用这种方法(将你的世界分成几块)你可以拥有几乎无限的世界大小。