游戏开发

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

2
处理屏幕外AI的好方法?
例如,缘故: 假设世界上有10个房间。 假设世界上居住着10个实体。 每个实体都有自己的“例行程序”,在该例行程序中它在房间中执行某些操作,并且还可以在房间之间进行导航。 假设玩家一次只能进入一个房间,那么跟踪其他实体在屏幕外其他房间正在执行的动作的好方法是什么? 最直接的选择是检查每一帧上的10个实体中的每个实体,检查它们的位置/状态,并确定该实体在任何给定时间是否应位于玩家所在的房间中。 (但是,这确实感觉资源很丰富,尤其是随着房间/实体数量的增加。) 另一种选择是跟踪自游戏开始以来所经过的时间,然后每个实体检查其模式是否与玩家所在的房间相交,并且是否按照时间检查是否已实体应该在此特定时间位于同一房间中,其图案不与玩家所在的当前房间相交的实体直到玩家进入其图案相交的房间并且仅在该点才计算不执行任何操作他们应该渲染。(但是,如果他们与房间互动,那么他们将必须始终检查与路线相交的房间的状态,以便确定在该时间点的位置,这并不是那么好。) 我要做的第三个选择是,首先仅查看与玩家位置相交的路线(如前所述),其次进入房间后,检查玩家是否在该房间内,如果不是,则仅检查房间的状态,以及进入下一房间需要多长时间。例如,一个看门人NPC进入房间,检查房间的状态,查看玩家是否有溢出物,计算清理该清理所花费的时间以及该路径需要花费多长时间等。时间是进入下一个房间的时间,我们只会检查玩家是否在房间里。用于渲染目的的NPC的确切位置仅在玩家进入房间时计算。 经过一番集思广益后,我想到了第三个选择,但我想知道是否存在一种已知或更好的方法来处理此类问题?

5
什么是更好的?很多小的TCP数据包,还是一个很长的TCP数据包?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 关闭 4年前。 我正在为自己制作的游戏在服务器之间发送大量数据。 我目前发送这样的位置数据: sendToClient((("UID:" + cl.uid +";x:" + cl.x))); sendToClient((("UID:" + cl.uid +";y:" + cl.y))); sendToClient((("UID:" + cl.uid +";z:" + cl.z))); 显然,它正在发送各自的X,Y和Z值。 这样发送数据会更有效吗? sendToClient((("UID:" + cl.uid +"|" + cl.x + "|" + cl.y + "|" + cl.z)));
16 networking 

4
如何使用Unity将玩家的移动限制在3D对象的表面?
我正在尝试创建类似于Mario Galaxy或Geometry Wars 3的效果,其中当玩家绕过“行星”时,重力似乎会调整,并且不会像重力一样从物体边缘掉落固定在一个方向上。 (来源:gameskinny.com) 我设法通过一种方法实现了与我要寻找的目标相近的方法,即应具有重力的物体将其他刚体吸引到该物体上,但是通过使用Unity的内置物理引擎,通过AddForce等进行运动,我只是无法让运动感觉正确。在没有开始从物体表面飞出的情况下,我无法使玩家足够快地移动,并且我无法找到施加的力和重力之间的良好平衡来适应这一点。我当前的实现是对这里发现的内容的改编 我觉得该解决方案可能仍会使用物理方法将播放器固定在物体上(如果他们要离开表面),但是一旦将播放器接地,便可以通过一种方法将播放器固定在表面上并关闭物理并通过其他方式控制播放器,但我不确定。 我应该采取哪种方法将播放器捕捉到物体表面?请注意,该解决方案应该在3D空间(而不是2D)中工作,并且应该能够使用Unity的免费版本实现。
16 unity  physics  control 

6
如何使单位选择圈合并?
我想知道如何使合并圆选择产生这种效果。以下是说明图片: 基本上我正在寻找这种效果: 如何实现圆的合并效果?我没有发现有关此效果的任何解释。我知道投射这些纹理可以开发贴花系统,但是我不知道如何创建合并效果。 如果可能的话,我正在寻找纯粹的着色器解决方案。

3
Unity技能可以转让吗?
我目前正在学习Unity,并通过视频游戏数学入门教科书来学习。 我的目标是为WebGL创建赛车游戏(使用Three.js,也许还使用Physic.js)。 我很清楚,Unity程序使您免受很多事情的困扰,并且即使开发一个简单的视频游戏也需要进行很多艰巨的工作,但是如果我通过大量Unity教程进行学习,那么很多我学到的技能可以转化为其他框架/引擎吗? 我非常精通WebGL的关卡设计,而且我是一个很好的3D建模者。我的弱点肯定是AI和物理。 尽管我正在迅速提高自己的数学水平,并且虽然无可辩驳的是Physics有趣,但是一天只有几个小时,并且有很多引擎可以处理这类事情。 人工智能确实对我更具吸引力,并且是必不可少的。AI在游戏之间会发生巨大变化,在开发过程中会进行大量调整,并且物理特性会更加稳定。 Unity中倾斜的AI概念是否可以让我将知识几乎转移到任何地方?还是我只是用这些技能来接替Unity Creek?
16 unity  career 

5
实时策略游戏联网
我正在为我修读的计算机科学课程开发实时策略游戏。它最困难的方面之一似乎是客户端-服务器网络和同步。我已经阅读了这个主题(包括1500个archer),但是我决定采用客户端-服务器方法,而不是其他模型(例如,通过LAN)。 这种实时策略游戏存在一些问题。值得庆幸的是,玩家采取的每项行动都是确定性的。但是,某些事件按计划的时间间隔发生。例如,游戏是由砖块组成的,当玩家拿下一块砖块时,“能量水平”(该砖块上的一个值)在被获取后应该每秒增加一。这是一个非常简短的解释,应该可以证明我的用例。 现在,我正在做瘦客户机,它们只是将数据包发送到服务器并等待响应。但是,有几个问题。 当玩家之间的游戏发展为残局时,每秒通常会有超过50个事件(由于已安排的事件,如前所述,堆积),然后开始显示同步错误。我最大的问题是,即使客户之间的状态偏差很小,也可能意味着客户做出不同的决定,这些决定会滚雪球变成完全独立的游戏。另一个问题(目前还不那么重要)是存在延迟,必须等待几毫秒,甚至是他们采取行动才能看到结果的几秒钟。 我想知道我可以使用什么策略和算法使最终用户更轻松,更快速,更有趣。鉴于每秒发生的事件数量很高,而且每场比赛有几个玩家,因此这特别有趣。 TL; DR以每秒> 50个事件的速度生成RTS,如何同步客户端?

3
半径平方和反平方半径在照明计算中的用途是什么?
在“《战地风云3》中的DirectX 11渲染”幻灯片中的一张幻灯片中,我注意到了以下代码: struct Light { float3 pos; float sqrRadius; float3 color; float invSqrRadius; } 我不明白为什么他们要存储半径的平方,甚至是平方的倒数(我相信只是平方的半径),而不是仅仅存储半径?他们如何在计算中使用这些数据?此外,锥形和线形灯又如何呢?该结构只能用于点光源,我看不到它可用于其他类型-没有足够的数据。我仍然很想知道他们如何使用该平方和invSquare。 更新:好的,我终于明白了。 这是经典的光衰减方程式,很容易在网上找到: float3 lightVector = lightPosition - surfacePosition; float attenuation = saturate(1 - length(lightVector)/lightRadius); length(lightVector)这样做实际上是相对昂贵的: length(lightVector) = sqrt(dot(lightVector, lightVector); 此外,分割操作(/lightRadius)也相当昂贵。 不用这种方法来计算光衰减,您可以通过以下方法进行计算,这将更快。 attenuation = saturate(1 - dot(lightVector, lightVector)*invRadiusSqr); 其中invRadiusSqr可以在CPU级别上预先计算并作为着色器常量传递。 而且,结果是得到了二次光衰减(而不是前一种情况下的线性光衰减),这更好,因为IRL光已显示出二次衰减。 谢谢大家的帮助!
16 lighting 

1
如何模拟Google Play购买?
我想知道当用户通过Google Play购买商品/道具并用真钱购买时,该如何测试功能的最佳做法? 例如,基本上,创建一个简单的测试,使用游戏货币在游戏期间购买和保存存储在库存中的物品。(例如,《最终幻想》系列的吉尔(Gil)或Tron Bonne的珍妮(Zenny )的PlayStation 1)我只在Unity3D或带有LibGDX库的Eclipse中编程时,才知道如何仅通过游戏赚钱来进行购买更新。 现在,让我说我必须创建一个程序来检查用户是否实际使用真钱购买了增能产品。接下来,系统需要检查在线状态。如果已连接,它将仅转到Google Play对话框,并询问用户是否要继续购买商品。如果是,并且信用卡余额足够,则返回游戏应用程序,并检查布尔值是否返回true,则将保存购买用户的商品。 另一个例子是,真实货币的金额将通过编程计算,如果不足,用户要求通过Google Play购买来增加真实货币的价值。如果返回true,则将重新加载真实货币值。 游戏开发人员基本上需要这个概念。但是,有没有一种安全的方法可以在不使用信用卡价值或其他功能的情况下,在不使用信用卡价值的情况下测试真实货币购买测试物品,并在此功能中将游戏应用实际发布到Google Play之前?是否有教程,入门指南,建议或其他相关内容?拜托,我想知道我将如何开始。谢谢。

2
为什么旋转屏幕时我的android应用程序不旋转
我正在LibGDX中构建游戏,并且游戏屏幕方向为横向。我希望它保持横向,但我仍然希望用户能够将设备翻转到另一侧,并且屏幕将随之旋转。我的应用程序拒绝执行此操作,我不知道该如何解决。我试着打开加速度计和指南针(没想到指南针有任何作用),但没有任何改变。有任何想法吗?
16 android  libgdx 

2
如何使用点积获得两个向量之间的夹角?
我正在学习在游戏中使用归一化向量。 我了解到,为了知道两个向量之间的角度,我可以使用点积。这给我一个介于-1和1之间的值,其中 1表示矢量平行并且面向相同方向(角度为180度)。 -1表示它们平行且面对相反的方向(仍为180度)。 0 表示它们之间的角度为90度。 我想知道如何将两个向量的点积转换为以度为单位的实际角度。例如,如果两个向量的点积为0.28,则0和360度之间的对应角度是多少?

2
游戏开发是否具有自己的建模类型?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 在一般的计算机科学有造型“语言”(读:标准化的图表技术),如UML 1,2,在数据库中也有类似的事情ERD 3,在业务还有其他类型,如BPMN 4,5。有没有类似游戏设计的东西?

2
如何在OpenGL中模拟有限的(256)调色板?
在Twitter上,我找到了正在开发的游戏的以下屏幕截图: 顶部的图像似乎没有任何颜色限制。但底部的其他两张图片则具有256色调色板。 我想达到类似的效果我的比赛(我使用OpenGL)。我该怎么办?
16 opengl  webgl 

1
可以使用Unity 2D制作像素艺术游戏吗?
我正在查看Unity 4.3中引入的新2D功能,我想我可能会遗漏一些东西。 在我看来,它们似乎是为高分辨率2D游戏而设计的,在这些2D游戏中可以缩放精灵,但不适用于像素艺术游戏。 像素级精灵设计为在屏幕上精确显示1:1像素:缩放会破坏它(线性缩放是一个例外,即可以将其缩放2倍,3倍,4倍等)。 但是我找不到“按原样显示”的方法,显然Unity坚持将其缩放到它认为合适的任何分辨率:我可以控制Sprite的Camera.size参数和“ pixels to units”参数,但我未能获得此结果。
16 2d  unity  sprites  pixel  pixel-art 

3
CPU-GPU内存数据流
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一名新手图形程序员,最近我一直在想-模型数据(网格和材质)如何从应用程序(CPU内存)流到图形卡(GPU内存?)?假设我有一个静态模型(例如建筑物),该模型一次加载和设置一次,并且在整个应用程序生命周期中都没有改变。 它的数据是否仅发送到GPU内存一次并永久存在? 当实际渲染模型的每个帧时,GPU处理器是否每次都必须从GPU内存中获取其数据?我的意思是-如果我有2个模型分别渲染多次,那么,如果我先多次渲染第一个模型,然后又多次渲染第二个模型,或者如果我仅一次渲染第一个模型,第二个就渲染一次,那将很重要一直像那样交织在一起?从这个意义上讲,我可以将此问题称为“内部GPU数据流”。 显然显卡的内存有限-当无法容纳渲染1帧所需的所有模型数据时,我猜想它一直在每帧从CPU RAM提取(部分)数据,对吗? 我知道互联网上有很多关于这方面的书籍和内容,但是也许您有一些关于如何管理此数据流的快速通用指南(何时发送什么和多少,何时以及如何呈现)? 编辑: 我忘了一个区别:将数据发送到GPU,并且将缓冲区设置/绑定为当前。后者会导致任何数据流吗? Edit2: 阅读Raxvan的文章后,我想提出一些动作: 通过初始化创建缓冲区(正如他所说,我可以将数据存储在CPU ram或GPU之一中) 缓冲数据更新(当数据保存在CPU内存中时,我认为这很简单;当数据保存在GPU内存中时,需要从GPU提取到CPU内存(然后取回)) 将缓冲区绑定为活动状态(这是一种告诉API我希望此缓冲区在下一次绘制调用中呈现的方式,并且它本身不会执行任何操作吗?) API绘图调用(在这里我想听听您在那里实际发生的事情)


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.