游戏开发

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

1
纹理图集与数组纹理:CPU和GPU处理它们的方式有何不同,如何影响性能?
Unity 5.4(目前处于beta版)将带来一个期待已久的功能(自2013年起),即array-textures-与OpenGL的ArrayTexture相同。但是,在对数组纹理和纹理图集进行了一些阅读之后,我仍然不太了解CPU和GPU在使用它们方面的技术差异。 因此,更具体地说,我想请您解释一下CPU和GPU如何处理纹理图集和纹理阵列之间的主要差异,最重要的是,这些差异如何影响性能和内存处理(例如纹理阵列如何比纹理图集等具有更高的性能)。 如果由于不幸的封闭源而缺乏有关Unity实现的技术细节,那么我很乐意提供有关OpenGL.s ArrayTexture的答案。

2
可编写脚本的对象中的条件变量
使用时ScriptableObjects,如何使某些变量成为条件变量? 示例代码: [System.Serializable] public class Test : ScriptableObject { public bool testbool; public string teststring; public int testint; } 目标:当testbool == true然后teststring是提供给编辑,如果testbool == false再testint是提供给编辑,而另一种是“ 变灰 ”。
10 unity  c# 

3
如何处理3D空间中的RTS单击和移动?
如何在完整的3D空间中处理单击和移动?通过简单的射线广播很容易在2D平面上进行处理,但是在3D中却不是这种情况,因为没有用于射线广播的端点可以获取端点。 我有两个想法: 进行光线投射,然后允许玩家通过其他输入(例如,缪斯赫尔)来选择光线的距离。 而不是完整的3D,而是具有多个“高度层”,因此玩家可以在命令移动之前更改高度层。 你怎么看?

2
在4D同构空间中进行裁剪时,GPU实际做什么的详细信息?
我正在通过实现一个微型软件渲染器来学习可编程渲染管道。我尝试以“硬件”样式实现它。但是,我对GPU管道不熟悉,并遇到了一些均质裁剪的问题。 均匀剪裁空间包含一个w变量,该变量在每个顶点处都不同。每个顶点对象在其自己的裁剪空间中是否是同质坐标(在投影矩阵和均质除以w之间)?如果是这样,如何截断比平截头体更近或什至在相机后方延伸的线和三角形(即w <= frustum_znear)? 更新:该线程说,齐次空间中的裁剪直接是4D齐次空间中的交集问题。表示交点为p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4。假设我在4D同构空间中有P0(-70, -70, 118, 120)和P1(-32, -99, -13, -11),且与交点plane w = -z(在NDC中为z = -1)为(-35, -96, -1, 0.9) t = 0.99,如何在NDC空间中获得相应的顶点对象? 一旦获得正确的交点,是否应该在顶点着色器产生的顶点对象之间进行插值以获取新的顶点对象?

4
如何确保RTS中的程序级别合理?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我已经看到对称性和连贯性在RTS关卡设计中很重要,但是我很懒,并且想做程序生成的关卡。 通过程序为RTS创建关卡时,如何确保产生公平的竞争环境?

1
以编程方式绘制球体的中间部分
我正在尝试创建一个球体的中间部分。基本上,要创建一个球体,将给出堆栈编号和切片编号,并且有两个变量phi(用于切片)和theta(用于堆栈)负责进度。并且该过程分为创建底盖,主体和顶盖(如下所示)。要达到中间一半(theta如下所示为中间50%),我们需要省略帽子,并以某种方式修改身体。我在玩堆栈号(1/4*stackNumbers to 3/4*stackNumbers),但没有给出想要的结果。 如何修改球体生成以达到中间一半(pi/4 <theta <pi*3/4)?我的总体问题是如何将球体分为上25%,中50%和下25%的3个不同部分? 以下是流行的以编程方式生成球体的代码: private void generateSphere(int stackNumber, int sliceNumber, boolean facingOut) { int capVertexNumber = 3 * sliceNumber; int bodyVertexNumber = 4 * sliceNumber * (stackNumber - 2); int vertexNumber = (2 * capVertexNumber) + bodyVertexNumber; int triangleNumber = (2 * capVertexNumber) + (6 * sliceNumber …

4
同时使用TCP和UDP是否有意义?
读完之后对于大量数据实时游戏,UDP是否仍然优于TCP?,我想知道同时使用TCP和UDP是否有意义,但是对于不同的事物: TCP,用于发送很少发送的信息,但应确保可靠到达。 例如分数更新,玩家的名字,甚至是游戏世界中灯光的开/关状态。 UDP用于传输不断更新的信息,有时可能会丢失,因为总是有更新的信息出现。 例如位置,旋转度等 这是一个合理的主意吗?可能的缺点是什么? 有更好的方法来解决这个问题吗?

2
如何在数百万小怪的厄运中为友善的店主辩护?
我正在探索厄运的禁忌洞穴。我发现,在成千上万的坏人中,有一个店主,他恰好在一个没人住的致命洞穴内卖东西。奇怪的。我不小心使他生气,结果证明他比游戏中每个怪物都要强大。弄乱。 因此,有两个问题供您参考:如何在一个正好出现在厄运的示例洞穴中,为一位店主辩护,正好在那儿等待随机冒险者购买东西, 和, 除了使他们以可笑的力量猛击你,还有什么更好的方法来阻止偷东西或杀死商店维持? 旁注:将这些链接起来的加分点,说明了他为什么会以及如何落在那儿,例如在厄运的洞穴中,没有怪物的剑或魔术来穿梭就可以生存,以及如果没有他就不会有一个不好的主意这些东西,打他。
10 npc 

4
程序生成,游戏更新和蝴蝶效果
注意:我几天前在Stack Overflow上问了这个问题,但是视图很少,没有任何响应。想通了,我应该问gamdev.stackexchange。 这是关于在不破坏先前生成的内容的情况下通过多个发布后更新来维护程序生成系统的一般问题/建议。 我正在尝试寻找信息和技术来避免在创建游戏程序内容时出现“蝴蝶效应”问题。当使用种子随机数生成器时,可以使用重复的随机数序列来创建可重现的世界。尽管有些游戏只是在生成后将生成的世界保存到磁盘上,但是过程生成的强大功能之一是您可以依靠数字序列的可再现性以相同的方式多次创建区域,从而无需使用坚持不懈。由于我的特定情况的限制,我必须最小化持久性,并且需要尽可能地依赖纯种子浓缩物。 这种方法的主要危险在于,即使在程序生成系统中进行最微小的更改,也可能导致蝴蝶效应,从而改变整个世界。这使得在不破坏玩家正在探索的世界的情况下更新游戏变得非常棘手。 我用来避免此问题的主要技术是在多个阶段设计过程生成,每个阶段都有自己的种子随机数生成器。这意味着每个子系统都是独立的,如果发生故障,将不会影响世界上的所有事物。但是,即使在游戏的孤立部分中,它似乎仍有很大的“破损”潜力。 解决此问题的另一种可能方法是在代码中维护生成器的完整版本,并针对给定的世界实例继续使用正确的生成器。虽然这对我来说似乎是一场维护噩梦,但我很好奇是否有人真的这样做。 因此,我的问题确实是要求提供一般建议,技术和设计模式来解决这种蝴蝶效应问题,尤其是在发行后的游戏更新中。(希望这不是一个广泛的问题。) 我目前正在Unity3D / C#中工作,尽管这是一个与语言无关的问题。 更新: 感谢您的答复。 看起来越来越像静态数据是最好和最安全的方法,而且当无法存储大量静态数据时,在生成的世界中进行长时间的活动将要求对使用的生成器进行严格的版本控制。在我的情况下,限制的原因是需要基于移动的云保存/同步。我的解决方案可能是找到存储有关基本事物的少量紧凑数据的方法。 我发现暴风城的“笼子”概念是思考事物的一种特别有用的方式。笼子基本上是一个种子点,可防止微小变化(例如,将蝴蝶笼中)的影响。

3
梯田山特征
我希望复制几天前在投资组合/博客网站上发现的程序性地形效果。 引用该地点,通过“将[最终高度]与某个高度范围内的某些阻尼值相乘,以创建美丽的峡谷特征”来生成梯田。 我想知道,有人能提供更多技术示例或程序来解决此问题吗?在过去的一周中,我一直在研究和学习很多有关程序性地形/纹理方法和实践的方法,但是我仍然没有遇到任何能详细解释什么是“夹紧”的东西,并且我开始感到沮丧。

1
跨平台C ++ / OpenGL ES开发(iOS / Android)
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 4年前关闭。 我已经具有使用C ++和OpenGL的合理经验,并且我最近决定尝试开发移动游戏。在使用Java成功创建了一个简单的OpenGL ES Android应用程序之后,我研究了以最少的重写代码为目标同时定位Android和iOS的方法。我尝试使用Visual Studio 2015引以为傲的跨平台应用程序开发工具,但发现它们太新了,因此文档记录极少。我可以构建程序提供给我的模板项目,但是我不知道如何在给定这些模板的情况下将资产添加到游戏中或处理触摸屏输入。 不幸的是,我有一个特定的愿望,过于具体,无法在Google上找到。我想使用C ++制作一个OpenGL ES游戏,并为Android和iOS使用针对平台的精简包装。人们向我提出了类似的问题(尽管不完全相同),并且不止一个人回答说,我想要做的不仅是可能的,而且相对容易,因为我不必担心UI。 我尝试了本教程,但是它已经存在了将近三年,因此可能是为较旧的技术设计的,结果,我遇到了各种无法解释的错误。不过,截至目前,该教程与我所发现的最接近。其他所有功能要么仅适用于Android,要么建议我每年支付数百美元来使用Marmalade SDK。有时,我感觉只需要编写两次代码,一次是用Java,一次是用Objective-C,但是我一直对这种解决方案是可行的,但由于某种原因,在任何现代细节中都没有涉及,深有感触。 总而言之,我想制作一个适用于iOS和Android的OpenGL ES游戏,并使用单个C ++代码库包装少量平台特定的代码。但是,尽管有几个人推荐了这种方法,但没人能告诉我该怎么做。有人可以告诉我是否确实可行,如果可以,我可以做什么或可以去哪里学习?


2
如何为动态世界实现符号距离场射线行进?
我想我了解“签名距离场射线行进”的基本知识。您使用一堆距离场(例如:http : //iquilezles.org/www/articles/distfunctions/distfunctions.htm)为场景建模,然后对于投射射线的每个像素,从射线的起点开始,找到到该点最近的物体的距离,然后将该点增加最近的距离,直到您碰到东西。我设法制作了一个简单的渲染器,这是该技术的大多数描述都停止的地方。 这使我对如何在实际场景中使用SDF Ray Marching提出了一些疑问: 问题1:在真实游戏中,场景通常很复杂,并加载到CPU上,并带有许多动态对象。我了解基本的遮挡剔除(例如八叉树),并且通过多边形渲染,可以在视锥中创建要渲染的项目列表(在CPU上)。 因此,想象一下我有一个非常复杂的场景,其中许多字符和动态对象在屏幕上移动,并由CPU控制。如何将每帧要渲染的对象流式传输到GPU?每个示例都将场景硬编码为GLSL。有人可以分享动态传输到着色器的级别的示例吗? 问题2:物体如何具有多种颜色?distance函数仅返回一个距离,但是实现通常如何将颜色传回?(例如,您击中了一个红色的球体,而不是一个蓝色的立方体。)如果这是一个CPU实现,那么在终止光线行进器时,我可以在distance函数内部调用一个global函数,这也可以传递被击中对象的纹理/颜色。但是,如何在GLSL中返回商品的颜色或纹理? 谢谢。

4
Java和Steam JVM部署
我目前正在考虑为游戏开发和部署到Steam Greenlight的选择。我非常喜欢Java与libGDX的结合,特别是因为Java具有libGDX的跨平台潜力,而且我知道可以在Steam上部署Java游戏。我也很满意必须创建某种包装程序,以便我的Java游戏可以调用C ++ Steamworks API。 我的问题是我可能遇到什么部署问题。具体来说,是在客户端计算机上安装JRE。我已经看到许多Steam安装程序会检查.NET运行时。我应该为JRE做类似的检查并安装吗? 在Steam上进行Java部署与使用Monogame进行C#之类的部署和维护相比,有什么明显的理由吗?
10 java  libgdx  steam 

1
python 3.5的Pygame?
我刚刚从...获得了Python 3.5链接:https://www.python.org/downloads/windows/ 以前我有Python 3.4和Pygame版本1.9.2a0。效果很好。但是,我的新Python 3.5与我为3.4获得的那个版本的Pygame不兼容。我在以下位置找到了最新的Pygame文件:链接:http : //www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 我下载了Pygame文件,但是它是.whl格式的文件。我应该做些什么? 我昨天尝试了一整天。到目前为止,我所发现的只是关于pip和wheel的信息,并执行一些命令,例如“ pip install”等。但是我完全迷失了。我以前从不知道点子。 我什至不确定是否有适用于Python 3.5的Pygame版本,但我确实尝试通过查找来查找,但我从未找到过此类信息。我想要做的就是让Pygame能够启动并运行Python 3.5,并使它能够像使用Python 3.4时一样出色地工作。如果Pygame尚未与Python 3.5兼容,那我就重新安装python 3.4和相应的pygame文件。
10 python 

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.