游戏开发

专业和独立游戏开发人员的问答

2
GPU如何处理纹理和VRAM?
实际上,这是一系列相互关联的问题: 经过渲染管道时,压缩纹理(dxt5 / dxt1等)是否已完全解压缩? 如果第一个问题的答案是正确的,那么如何管理几个未压缩的大型纹理? 帧缓冲与现代GPU中的VRAM有什么不同吗?
18 textures  gpu  memory 

1
为什么此过程内容生成而不是其他?
我正在阅读在线过程内容生成一书,在第1章第2页上,有一个PCG是什么的例子,另一个是PCG不是和我不能分开的例子。 根据他们,这是PCG: 游戏引擎中间件,可迅速将游戏世界塞满植被 根据他们的说法,这不是PCG: 一个能够集成自动生成的植被的游戏引擎 同样在第1页上,他们明确表示他们不考虑游戏引擎PCG 这里的一个关键术语是“内容”。在我们的定义中,内容是游戏中包含的大部分内容:关卡,地图,游戏规则,纹理,故事,物品,任务,音乐,武器,车辆,角色等。游戏引擎本身不被视为内容在我们的定义中。 我的猜测是PCG示例是游戏中的代码(或者可以是适用于任何游戏的代码),它可以识别游戏地图并根据其填充植被。对于我来说,不是PCG的示例就像是游戏引擎提供的选项,因为开发人员可以通过用户界面离线添加植被。 最后一个是我的一个非常疯狂的猜测,我敢肯定我是错的,因为乍一看它们听起来都像PCG。请帮助我区分它们。

5
如何解决在简单控件上苦苦挣扎的玩家?
我有一个使用Phaser 3构建的HTML游戏,但是我无法决定如何使用控件。我已经对它们进行了多次更改,现在感觉就像在可用性和娱乐性之间找到了一个甜蜜点。但是,我仍然看到人们在挣扎。 游戏中有一个带有弹弓的男孩,可以将其弹回并发射,以击倒敌人的头。屏幕的两侧都有两个虚拟按钮,可用来旋转角色。我正在考虑让角色自动旋转,因此弹弓是唯一涉及的机械师,无需指示即可拾取和玩游戏。但是,我觉得这样会破坏快速转身并射击敌人的整个目的。 像我这样的简单游戏是否需要说明,或者可用性更重要?

5
在现代多人游戏中,巨大的静态对象(如环境)是否从服务器传输到客户端?
我有一个权威的系统,当玩家加入比赛时,它会获取所有已经生成的对象-本身(客户端)生成的对象。 看起来像这样: Client 将访问令牌发送到 Server Client 收到来自 Server Client 将场景切换到游戏场景 Server发送玩家,板条箱,可以与之互动的对象,以便client生成并显示它们。 但是地面物体呢?现在,我在服务器和客户端上具有完全相同的场景-以一个静态平面作为地板。目前,我正在添加新的东西,树木,楼梯并一起构建东西。 我以为-我们很好。但是环境也应该不同步吗?是否以某种方式联网?由服务器拥有? 让我们来League of Legends: 这是一个静态环境,可能是一个组合的网格(楼梯,草地,墙壁,商店)。但是它是真正保留在客户端上还是由服务器在加载屏幕期间发送?
18 unity  networking  maps 

2
如何在游戏中实施“禁用广告”购买?
我想在我的游戏中添加“无广告”服务,以便一次性付款即可删除广告。如何正确实施? 如果我只是保存了该服务是在设备上本地支付的事实,那么如果用户以某种方式删除了应用程序的数据,则将不得不再次支付。

2
RTS游戏单位结构
我想要一种方法来制作很多不同的单元,而不必多次编写诸如moveTo和Attack动作之类的东西 我的观察方式有两种。 具有标志的单个通用Unit类,该类指定了它可以/不能执行的操作(然后在静态数组中创建实例,并在需要时获取它们) 对于具有特定于单元的操作(例如,Attack,Harvest,Patrol)具有抽象方法的抽象单元类,则所有这些都需要在子类中实现,即使该单元实际上无法收获任何东西。 第一种方法似乎最简单,但是我最终将为大多数单元使用大量代码。 第二种方法也可以。但是,如果我决定拥有两个可以收集资源的不同单元,那么我将在两个不同的类中拥有完全相同的代码,这似乎不是正确的方法。 这是解决这个问题的正确方法吗? 在像AoE这样的游戏中,我想每个单位都有某种动作/命令列表,我真的很想知道如何实现类似的目标,在这里我可以为每个动作/命令编写一次代码,并且然后将其提供给所有需要执行该操作的部门。 如果我不清楚(很有可能),或者您需要有关我到底在寻找什么的更多信息,请在评论中问我。
18 unity  c#  architecture  rts 


12
如何确保一段代码只运行一次?
我有一些代码只想运行一次,即使触发该代码的情况可能会多次发生。 例如,当用户单击鼠标时,我要单击事物: void Update() { if(mousebuttonpressed) { ClickTheThing(); // I only want this to happen on the first click, // then never again. } } 但是,使用此代码,每当我单击鼠标时,事物都会被单击。我怎样才能使它发生一次?

3
将程序生成的世界与其他世界相匹配
您读过罗杰·泽拉兹尼(Roger Zelazny)的《琥珀编年史》吗? 想象自己在第三人称MMO游戏中玩。您在世界上产生并开始游荡。一段时间后,当您认为已经学会了地图时,便意识到自己处在一个从未见过的地方。您返回到您确定知道的最后一个地方,并且它仍然存在。但是世界其他地方已经发生了变化,您甚至都没有注意到它是如何发生的。 我读过有关程序世界的信息。我已经阅读了有关Perlin噪声和八度音阶,单纯形噪声,菱形平方算法,有关构造板块和水蚀模拟的信息。我相信我对程序化世代的一般方法有一些模糊的理解。 有了这些知识,我不知道如何才能做上面写的事情。我想到的每个想法都会遇到一些理论问题。这是我可以想到的一些想法: 1)“可逆”世代,以种子号作为输入,并完整描述了一个块号 我怀疑是否有可能,但是我想像一个函数,该函数将接收种子并产生数字矩阵,并在此矩阵上构建块。对于每个唯一编号,都有一个唯一的块。第二个函数,获取该唯一的组块编号并生成包含该编号的种子。我试图在下图中制定一个方案: 2)使块完全随机,并在它们之间进行过渡。 正如阿修索建议的那样。这种方法的好处是它是可能的,并且不需要魔术功能:) 我认为这种方法的弊端在于,不可能拥有一个多元化的世界。如果让您说一个仅由一个数字表示的群岛和一个大洲,并且它是相邻的块,那么块的大小就不会等于大块。而且我怀疑是否可以在各个块之间进行漂亮的过渡。我想念什么吗? 因此,换句话说,您正在开发具有程序生成世界的MMO。但是,除了拥有一个世界,您还有许多。您将采用哪种方法来生成世界,以及如何在玩家未注意到过渡的情况下实现玩家从一个世界到另一个世界的过渡。 无论如何,我相信您已经有了大致的想法。你会怎么做?


4
C#在Unity中是否有所不同?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 Unity是使用其他版本的C#,还是全部相同?它看起来与常规C#不同,但其中包含一些常规C#元素。
18 c#  unity 

3
向游戏中添加非游戏元素的目的是什么?
例如,我将参考Jetpack Joyride中的科学家。 我确实了解科学家取得了一些成就,您可以杀死他们,或者您拥有书呆子驱蚊剂,但是我没有问任何这些。 我想了解在游戏中是否有任何非常重要的理由要具有这样的元素,因为(至少在最初)它似乎微不足道。 更准确地说,科学家的存在(或游戏中任何等效的,看似微不足道的“演员”)是否会对玩家产生任何心理影响或影响?还是它们只是游戏的一个小小功能,几乎没有改变玩家在玩游戏时的感觉和态度?

2
启动时分配和释放大量内存是否“清理内存”?
《游戏编码完成》第四版,第5章(游戏初始化和关闭),“ 检查内存”部分包含以下有趣的代码示例: bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical memory."); return false; …
18 c++  memory 

2
如何在Unity的检查器中编辑键值对(例如字典)?
我有一个正在创建的咒语系统,原理如下: 每个咒语都是一个自主的预制件。它包含具有某些属性(基本损坏,持续时间...)的脚本,可以在检查器中对其进行修改。 我有一个Spell枚举,列出了代码中所有可能的咒语,用于游戏逻辑 当我想施放法术时,我需要能够获得该法术的预制件以实例化它并读取其信息。 每个演员(无论是玩家还是敌人)都需要列出该咒语的可能动画 我尝试实现的问题是: 为了列出每个演员的动画,我可以使用Dictionary<Spell, Animation>,但是检查器不支持字典,这使得很难轻松地编辑多个演员类型。 我需要一些方法来轻松地从相应的枚举中访问拼写预制件。在这里我也可以使用字典,但是我只能在检查器中引用预制件,而不能在代码中引用,这意味着我将无法填充此字典 我正在寻找一种将我的咒语枚举轻松关联到相应的预制件和动画的方法

6
无缝的tilemap渲染(无边界的相邻图像)
我有一个2D游戏引擎,可通过从tileset图像绘制图块来绘制图块。由于默认情况下OpenGL只能包装整个纹理(GL_REPEAT),而不仅仅是部分纹理,因此每个图块都被拆分为单独的纹理。然后,将同一图块的区域渲染为彼此相邻。这是按预期工作时的样子: 但是,一旦引入分数缩放,接缝就会出现: 为什么会这样?我以为这是由于线性过滤混合了四边形的边界,但仍然发生在点过滤中。到目前为止,我发现的唯一解决方案是确保所有定位和缩放仅在整数值处进行,并使用点过滤。这可能会降低游戏的视觉质量(尤其是子像素定位不再起作用,因此运动不太流畅)。 我尝试过/考虑过的事情: 抗锯齿可以减少但不能完全消除接缝 关闭mipmapping,无效 分别渲染每个图块并将其边缘拉伸1px-但这是一种非优化,因为它不再能够一次性渲染图块区域,并且会沿着透明区域的边缘创建其他伪像 在源图像周围添加1px边框并重复最后一个像素-但随后它们不再是2的幂,从而导致与不支持NPOT的系统的兼容性问题 编写自定义着色器以处理平铺图像-但是您将有何不同呢?GL_REPEAT应从边框的图像另一侧抓住像素,而不要选择透明度。 几何形状完全相邻,没有浮点舍入错误。 如果片段着色器经过硬编码以返回相同的颜色,则接缝消失。 如果将纹理设置为GL_CLAMP而不是GL_REPEAT,则接缝消失(尽管渲染错误)。 如果纹理设置为GL_MIRRORED_REPEAT,则接缝消失(尽管渲染还是错误的)。 如果我将背景设为红色,则接缝仍为白色。这表明它是从某个地方(而不是透明度)采样不透明的白色。 因此,接缝仅在GL_REPEAT设置时出现。仅出于某种原因,仅在此模式下,几何图形的边缘会出现渗色/泄漏/透明性。这个怎么可能?整个纹理是不透明的。

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.