游戏开发

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

2
在C ++中为体素引擎存储体素
我正在尝试编写一个小的体素引擎,因为它很有趣,但是却很难找到存储实际体素的最佳方法。我知道我将需要某种类型的块,因此我不需要在内存中拥有整个世界,而且我知道我需要以合理的性能渲染它们。 我了解了八叉树,据我所知,它以1个多维数据集开头,在那个多维数据集中可以再有8个多维数据集,在所有这8个多维数据集中可以是另外8个多维数据集,等等。但是我认为这不适合我的体素引擎,因为我的体素多维数据集/项目都将完全相同。 因此,另一种选择是只创建一个大小为16 * 16 * 16的数组,并将其作为一个大块,然后用项目填充它。没有零件的零件的值将为0(0 =空)。但是,这恐怕会浪费大量内存,而且速度不会很快。 然后另一个选择是每个块的向量,并用多维数据集填充它。多维数据集在块中保持其位置。这样可以节省内存(没有空气障碍),但是在特定位置查找多维数据集要慢得多。 所以我真的找不到一个好的解决方案,我希望有人可以帮助我。那么,您将使用什么?为什么? 但是另一个问题是渲染。使用OpenGL读取每个块并将其发送到GPU很容易,但是非常慢。每块生成一个网格会更好,但是这意味着每次我打破一个块时,我都必须重建整个块,这可能会花费一些时间,导致轻微但明显的打ic,我显然也不想这样做。因此,这将更加困难。那么我该如何渲染立方体呢?只需在每个块的一个顶点缓冲区中创建所有多维数据集,然后渲染该多维数据集,然后尝试将其放入另一个线程中,或者有其他方法吗? 谢谢!
9 c++  voxels 

3
调整游戏内容大小的方法
我正在开发一个故事丰富的游戏。我不确定我是否有足够的时间或金钱来使这个故事的每个部分达到一个水平。 设计师之间是否有共同的方法来解决此问题?我应该先写整个故事,然后再切一些部分使其适合我的时间/金钱预算吗?

3
开发人员如何通过Steam Direct获得收益?
我所知道的是: Steam是由Valve公司开发和拥有的数字分发平台。Steam以其视频游戏,XR软件和游戏开发程序而闻名。之前,要发布给Steam的产品是通过投票方式决定的。该系统称为Steam Greenlight。现在,开发人员只需支付 7,000印度卢比(100美元)的费用,即可将其产品直接发布到Steam。这个新系统称为“ Steam Direct”。 这是我需要知道的: 在蒸汽直接的新系统,就开发商拿任何钱掉在Steam上出售他们的产品(S)的每一个副本? 如果这样做的话,Steam会保留百分之几的钱(或拿走用于税收和/或其他目的的钱),并给产品开发者百分之几的钱? 如果开发人员确实通过在Steam上出售产品来获利,那么最常见的付款方式是什么?
9 steam 

4
是否应该使用UsedImplicitly属性注释Unity生命周期方法?
使用UsedImplicitly属性注释Unity生命周期方法是否可以提高代码的可读性? 例如: public class Example : MonoBehaviour { [UsedImplicitly] private void Awake() { DoSomething(); } private void DoSomething() { // ... } } 这篇关于“构建Unity MonoBehaviours”的博客文章建议将此方法作为有用的约定。 使用[UsedImplicitly]属性注释代码中隐式(或自动)调用的所有Unity生命周期方法(开始,唤醒,更新,OnDestroy等),事件方法和其他函数。尽管此属性包含在UnityEngine.dll中,但ReSharper使用它来为似乎未引用的方法禁用代码清除建议。它还有助于使刚接触Unity和您的代码库的人更容易阅读代码,尤其是对于通过检查器引用的事件。 (注意:我不认为ReSharper会为看似未引用的Unity生命周期方法显示代码清理建议,因此这可能已过时。) 我同意上面的帖子,这对于那些对Unity较新的人可能会有帮助。我还认为这可能是标记那些有用的统一生命周期的功能不被使用的频繁程度Awake,Start以及Update。但是我想知道这是否真的是“干净代码”的良好约定,还是仅仅是噪音降低了可读性。
9 unity  c# 


2
如何使字段在检查器中可见(可附加),但无法通过代码访问(类似私有)?
假设我有一个名为buttontype 的变量,Button它当然是System.Serializable。 我希望该变量可以通过检查器分配,所以我做到了public: public class SomeScript : MonoBehaviour{ public Button button; } 这给了我: 现在,我想保持代码的干净和安全(井井有条),这是我需要保留封装的真实原因。 我知道有多种方法可以像在运行时那样检索组件,transform.Find("Some/Genius/TypeUnsafe/Path")或者GameObject.Find("3 seconds scene iteration").GetComponent(...).我想避免这种情况。 如何搭配一个变量private access与它的public access的检查?

1
如何渲染2D自上而下的平铺定向水流?
我正在开发受矮人要塞启发的自上而下的基于图块的相当图形化2D游戏。我现在要在游戏世界中实现一条河流,该河流覆盖许多图块,并且我已经计算出每个图块的流向,如下图所示(每个图块中的红线所示)。 作为图形样式的参考,这是我的游戏当前的外观: 我需要的是一种使每块河砖中的水动画化的技术,以使水流融合到周围的砖中,从而使砖的边缘不明显。 我发现的最接近的示例在http://www.rug.nl/society-business/centre-for-information-technology/research/hpcv/publications/watershader/中进行了描述,但我不太了解在能够理解其中发生了什么时?我对着色器编程有足够的了解,可以实现自己的动态照明,但是我无法完全理解链接文章中采用的方法。 有人可以解释如何达到上述效果,还是建议另一种方法来获得我想要的结果?我认为上述解决方案的一部分是将图块重叠(尽管我不确定哪种组合),并旋转用于变形的法线贴图(再次不知道具体细节),而过去我有点迷失了,谢谢任何帮助!

5
如何在玩家合作中平衡经验积累?
我正在与朋友一起开发在线游戏,目前我们受到总体游戏设计问题的困扰:您如何通过经验值和战利品/金币奖励玩家,同时仍然鼓励他们一起玩,特别是与不一定并存的玩家一起玩时在他们的技能范围内? 我们游戏的技术细节: 基于网格的自上而下的全球地图布局(想想《塞尔达传说》) 随机生成的回合制地牢(想想《口袋妖怪神秘地牢》) 体验曲线,非战斗技能,交易,社交互动(想想Runescape) 该计划的目的是让玩家进行社交活动,完成部分任务并掌握游戏技能,然后与约4个朋友组成的小组进入地牢,以进行技能战斗并获得战利品。理想情况下,技能更强的玩家可以进入难度较高的地牢并执行更艰巨的任务,但仍然能够在较简单的副本中加入较新的玩家,而不会变得平凡,也不会强迫一名玩家承担大部分战斗。 可能的修复: 删除各种体验曲线和奖励,并使所有内容保持平衡(缺点:没有理由要磨) 将“升级”限制为获得更多的金钱和更好的武器(缺点:更多的战利品实际上变成了更高的等级) 在地牢中时,将低等级的玩家提升到最高等级的团队成员的水平(缺点:可能是一个漏洞,允许玩家快速进行技能训练) 在游戏中添加需要用户技巧的额外组件,这样玩家就不会仅仅依靠关卡来擅长游戏(例如快速时间事件)(缺点:在回合制游戏中难以实现,含糊不清) 这些只是一些想法,我已经思考了一段时间。对这个问题有什么想法,可以采用什么机制来调和?

2
如何在2d城市建造者中提高昂贵功能的性能
我已经在寻找答案,但是我无法找出处理昂贵函数/计算的最佳方法。 在我当前的游戏(基于2d瓷砖的城市建筑物)中,用户能够放置建筑物,建造道路等。所有建筑物都需要与用户必须放置在地图边界处的路口相连接。如果建筑物未连接到此路口,则在受影响建筑物上方将弹出“未连接到道路”标志(否则必须将其删除)。大多数建筑物都有半径,并且可能彼此也有关联(例如,消防部门可以帮助半径30瓦范围内的所有房屋)。这也是我在公路连接发生变化时也需要更新/检查的内容。 昨天我遇到了一个很大的性能问题。让我们看一下以下情况:用户当然也可以删除建筑物和道路。因此,如果用户现在在连接点之后立即断开连接,则需要同时更新许多建筑物。我认为第一个建议是避免嵌套循环(在这种情况下,这绝对是一个重要原因),但是我必须检查一下... 如果在拆除路砖的情况下建筑物仍连接到路口(我仅对那条路受影响的建筑物这样做)。(在这种情况下可能是一个较小的问题) 半径图块列表,并获取半径范围内的建筑物(嵌套循环-大问题!)。 // Go through all buildings affected by erasing this road tile. foreach(var affectedBuilding in affectedBuildings) { // Get buildings within radius. foreach(var radiusTile in affectedBuilding.RadiusTiles) { // Get all buildings on Map within this radius (which is technially another foreach). var buildingsInRadius = TileMap.Buildings.Where(b => …

2
如何避免动画师中的意大利面条?
我正在Unity中制作动画,到目前为止我只制作了四个(上下左右),我的动画窗口如下... 问题是,如果我要向上移动,我希望英雄一直保持向上状态,而不要进入“空转”(或者他开始了),但这意味着我有4个空闲位置...并且每个位置都可以转换为“向上”,“向下” ,左或右,并且每执行一次其他操作就会成倍增加... 这让我觉得自己做错了...。 是否有更好的方法在不同动作之间进行转换?
9 unity  2d  animation 

3
如何将重复性融入不会破坏体验的游戏中
我正在开发一款教育技术(Edtech)游戏,尝试在教授外语时遵循冒险RPG的格式。 显然,EdTech游戏必须实际进行教学,这需要重复进行精通。特别是需要大量练习才能掌握的外语。但是,游戏的目标是使故事情节和游戏世界沉浸到沉迷于玩家的地步。重复通常会破坏故事的沉浸感和线性。 有什么策略可以确保发生必要的重复,以使学生保留信息,同时也可以跟故事一起玩呢?有吗

6
如何使用程序生成来支持探索机制?
程序生成似乎将是开放式冒险游戏的绝佳工具,因为它将提供几乎无限的世界。但是,我注意到大多数成功的程序生成游戏的类型完全不同。我能想到的唯一使用程序生成进行探索的游戏是《无人深空》,但未能达到预期,部分原因是程序内容虽然庞大,但未必会像探索游戏机制那样为游戏增添价值人们以为会。 从尝试制作程序生成游戏的尝试以及我在其他游戏中所看到的,我看到了三个阻碍冒险游戏中程序生成的问题,而且我看不到任何解决方案: 程序性地形可能很简单,但程序性讲故事却并非如此。我都尝试过。一些简单的规则可以使事物看起来像高山或城市,但是除非您有某种探索,否则很难围绕它进行游戏。但是,除非有一张地图可以使用,否则很难设计任务。您如何寻求一个可能不存在的地方? 程序性地形提供了没有密度的缩放比例。当然,程序性的山峰可能具有所有的纹理和山脊,使其具有真正的山峰的复杂性,但是,除非在该山峰上有很多事情要做,它的乐趣在哪里?程序生成的大部分优势在于,很容易将某件事情变得庞大。如果您将一个世界变得过于庞大而又没有投入足够的新东西去体验这个世界,那么它将感到无聊。 经验不一致。冒险游戏的许多乐趣都达到了“那一部分”。演练,教程和Wiki通常依赖于玩家都在同一世界上玩同一游戏的事实。如果体验如此个性化,那么与他人分享您对游戏的兴奋就更加困难。想象一下,如果世界上没有其他玩家玩过具有相同位置,角色或生物的游戏,那么就分享一个关于游戏的模因。 牢记这些问题,也许您会想到其他问题,还有没有办法在不破坏探索的情况下将程序生成纳入游戏?也许某些有限的程序技术可以使冒险游戏从中受益,但不会妨碍故事的发展?

2
为什么iTunes Connect的应用分析如此错误?
我已经开发了一款手机游戏,并在Google Play和Apple App Store中都列出了它。Google Play的安装统计数据非常接近我自己的统计数据,但是iTunes Connect显示的统计数据远非如此-当大约只有120个时,它显示了近1,000个“应用程序单元”(我认为是安装)。 他们的大多数“装置”来自中国。 我试图弄清楚1)为什么iTunes Connect会计算所有这些虚假的“安装”,以及2)某人从执行所有这些虚假安装中可以获得什么好处。 预先感谢您的见解。
9 iphone  ipad  appstore 

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
如何在OpenGL中实现基于GPU的动态几何LOD?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 我正在尝试实施LOD以提高游戏性能。我发现了一个很好的教程。 我想我理解的基本概念是:获取摄像机到对象的距离,检查正确的LOD级别,然后使用“适当数量的实例”渲染对象。 我该如何实施?提供的示例代码对我来说是个谜。 一些问题: 这是实现LOD的好方法吗? 有人可以向我详细解释一下,我如何实现它,以及查询等等。 我正在使用渲染所有对象 GL11.glDrawElements(GL11.GL_TRIANGLES, model.getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); 示例代码使用GL_POINTS。我也可以实现GL_TRIANGLES吗?
9 opengl  java 

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.