游戏开发

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

3
RPG如何平衡线性损伤公式?
我正在为RPG开发伤害公式。我检查了许多流行的标题公式以作为参考(最终幻想,计时触发,金太阳和恶魔城),并且大多数似乎都使用线性函数。 我的问题是,对于线性函数,在每次升级时,损害增加的百分比会下降。例如,当您从Lvl 2变为Lvl 3且伤害增加50%时,然而,当您从Lvl 50变为Lvl 51时,一次攻击只会对同一个敌人造成0.5%的伤害。 再加上XP在这些游戏中成倍升级的事实,对我来说没有意义。因此,尽管我很想放弃自己游戏的这种功能,但由于许多我最喜欢的游戏都在使用某些功能,所以我觉得我一定会缺少这些功能。此外,我玩过这些游戏,却从未注意到。 例如:黄金太阳的伤害计算很简单:伤害=攻击-防御。下面的口袋妖怪的伤害公式稍微复杂一些,但绝对伤害的增长在每个等级上都会降低。 我是否正确地认为在这些游戏中,每个级别的伤害增加百分比较低? 他们如何平衡游戏,使关卡在游戏后期仍然很重要?

2
什么定义了AAA游戏?
我试图找到一个精确的定义。我在Wikipedia和Gaming SE上找到了一些线索,但除了以下近似之外,我找不到更多的线索: AAA游戏相当于电影中的大片,是具有最高开发预算和提升水平的游戏。 这个定义似乎不准确。如何确定游戏为AAA? 假设有一个小型独立工作室制作游戏并成长。这些年来,他们雇用了越来越多的人,并在游戏中投入了越来越多的钱。他们的比赛在哪个里程碑被认为是AAA?

3
在隐藏网格的位置/位置如何隐藏后处理的网格轮廓
我正在3D引擎中设置活动轮廓,为选定的3d角色或屏幕上的风景设置高光效果。在使用模板缓冲区并获得一些不满意的结果(形状问题为凹形,由于距相机的距离导致轮廓线厚度以及台式机和笔记本电脑之间的不一致)后,我切换到边缘检测和帧缓冲区采样并得到了轮廓很满意。 但是,当选定的网格位于另一个网格之后时,我无法隐藏轮廓。考虑到我的过程,这很有意义,因为在渲染场景的其余部分之后,我只是从帧缓冲区中渲染了2d着色器轮廓。 下面是我的结果的两个屏幕截图。第一个是“好”轮廓,第二个是在阻挡轮廓源的网格上看到轮廓的位置。 渲染过程如下所示:1)仅绘制突出显示的网格的alpha,在帧缓冲区(framebuffer1)中捕获黑色轮廓。 2)将纹理从framebuffer1传递到执行边缘检测的第二个着色器。在framebuffer2中捕获边缘。 3)渲染整个场景。 4)在场景顶部从framebuffer2渲染纹理。 我对如何完成工作有一些想法,希望能收到关于其有效性或更简单或更佳方法的反馈。 首先,我考虑过将整个场景渲染到帧缓冲区,并将突出显示的网格的可见轮廓存储在alpha通道中(所有白色保存,突出显示的网格可见)。然后,我将在alpha通道上执行边缘检测,渲染场景帧缓冲区,然后在顶部渲染边缘。结果是这样的: 为此,我想到了仅在突出显示对象的渲染过程中设置一个定义,该定义将为所有可见像素在alpha中绘制所有黑色。 我的第二个想法是使用上面概述的当前渲染过程,而且在渲染选定网格的轮廓时,还将X,Y和Z坐标存储在framebuffer1的R,G和B通道中。边缘检测将被执行并存储在framebuffer2中,但是我会将RGB / XYZ值从alpha的边缘传递到轮廓。然后,在渲染场景时,我将测试坐标是否在framebuffer2中存储的边缘内。如果是这样,我将测试当前片段的深度,以确定它是在从RGB通道提取的坐标之前还是之后(转换为相机空间)。如果片段在深度坐标之前,则片段将正常渲染。如果片段在后面,则将其呈现为纯轮廓颜色。 我正在为该项目使用LibGDX,并且希望支持WebGL和OpenGL ES,因此我没有涉及几何着色器或更新的GLSL函数的解决方案。如果有人可以评论我提出的方法或提出更好的建议,我将非常感激。

1
如何在自制渲染系统中缓存资源
背景: 我正在为使用C ++和OpenGL的实体组件系统类型体系结构设计一个简单的3D渲染系统。该系统由一个渲染器和一个场景图组成。完成渲染器的第一次迭代后,我可能会将场景图分发到ECS架构中。目前,它是一种占位符。如果可能,以下是我对渲染器的目标: 简单性。这是一个研究项目,我希望能够轻松更改和扩展我的系统(因此采用ECS方法)。 表现。我的场景可能有很多小型模型,也有很多具有很多几何图形的体积。从OGL上下文中获取对象并在每个渲染帧中缓冲几何体是不可接受的。我的目标是数据本地化,以避免缓存未命中。 灵活性强。它必须能够渲染精灵,模型和体积(体素)。 解耦。编写渲染器后,场景图可以重构为核心ECS体系结构。 模块化。能够在不更改场景图的情况下交换不同的渲染器将是很好的。 参照透明性,表示在任何时间点我都可以给它任何有效的场景,并且它将始终为该场景渲染相同的图像。特别地,该目标不是必需的。我认为这将有助于简化场景序列化(我将需要能够保存和加载场景),并为我提供了在运行时出于测试/实验目的而在不同场景中交换的灵活性。 问题与思路: 我想出了一些不同的方法来尝试,但是我正在努力为每个渲染节点缓存OGL资源(VAO,VBO,着色器等)。以下是到目前为止我已经想到的不同的缓存概念: 集中式缓存。每个场景节点都有一个ID,渲染器具有将ID映射到渲染节点的缓存。每个渲染节点包含与几何图形关联的VAO和VBO。高速缓存未命中获取资源并将几何图形映射到高速缓存中的渲染节点。更改几何形状后,将设置脏标志。如果渲染器在遍历场景节点时看到肮脏的几何标志,则它将使用渲染节点重新缓冲数据。移除场景节点后,会广播事件,并且渲染器会在释放资源的同时从缓存中删除关联的渲染节点。或者,将节点标记为要删除,而渲染器负责将其删除。我认为这种方法最接近目标6,同时也考虑了4和5。2遭受了额外的复杂性和丢失了使用地图查找而不是数组访问的数据局部性的麻烦。 分布式缓存。除了每个场景节点都有一个渲染节点外,其他与上面类似。这会绕过地图查找。为了解决数据局部性,可以将渲染节点存储在渲染器中。然后场景节点可以改为具有指向渲染节点的指针,并且渲染器将指针设置在高速缓存未命中。我认为这种模仿实体组件方法,因此与架构的其余部分保持一致。这里的问题是,现在场景节点保存渲染器实现特定的数据。如果更改了事物在渲染器中的渲染方式(如渲染精灵与体积),则现在需要更改渲染节点或向场景节点添加更多“组件”(这也意味着更改场景图)。从好的方面来说,这似乎是启动并运行我的第一迭代渲染器的最简单方法。 分布式元数据。渲染器缓存元数据组件存储在每个场景节点中。此数据不是特定于实现的,而是包含ID,类型以及缓存所需的任何其他相关数据。然后,可以使用ID直接在数组中完成缓存查找,并且该类型可以指示要使用的呈现方法的类型(如精灵与体积)。 访客+分布式映射。渲染器是一个访客,场景节点是访客模式中的元素。每个场景节点都拥有一个只有渲染器才能操作的缓存键(就像元数据一样,只是一个ID)。该ID可以用于数组,而不是广义的地图查找。渲染器可以允许场景节点根据场景节点的类型调度不同的渲染功能,并且ID可以由任何缓存使用。默认或超出范围的ID将指示高速缓存未命中。 您将如何解决这个问题?或您有什么建议吗?感谢您阅读我的文字墙!

1
如何在Unity中运行时从交互式布料保存网格?
在场景开始时,我将一个名为“ sheet”的GameObject放置在“ ball” GameObject上方。该工作表上有一个互动式布料组件和一个布料渲染器。交互式布料组件的网格是具有大量顶点的平面。在运行时,薄片落在球上并创建我想要的形状。如果此时禁用“交互式布料”组件,则图纸网格将完全保持所需,但无法将其作为预制件拉出。 有谁知道获取该形状副本的方法? 例如,通过在运行时从Interactive Cloth中读取网格,然后使用它来将网格更改回我想要的没有Interactive Cloth组件的方式。 任何帮助将不胜感激。
10 unity  c#  3d-meshes  cloth 

2
将游戏动作同步到特定动画时间的好的技术?
因此,我在开发的游戏中遇到了一个问题,但这似乎是很多游戏中都涉及的非常基本的问题。 我的游戏要求在角色动画期间的某个特定时间点发生某些游戏功能。因此,正如标题所说,我想知道有什么好的技术和基本策略可以将与游戏相关的事件/功能/动作同步到角色动画中的特定点。 以下是我在各种类型的游戏中谈论的一些简单示例: 您的角色将他们的枪重新装在射手中。您的角色将播放他/她的“重新加载”动画,但重要的是,仅在更换弹匣并握住枪支后的确切时刻调用设置currentAmmo变量的函数。这可能是重新加载动画中间的某个时刻。 在基于回合的RPG中,您的角色站在面对一排敌人的队伍中。当被命令进攻时,您的角色之一会奔跑/跳跃到敌人中的一个,并挥舞其巨剑,然后再奔跑/跳跃回到其站立位置。您想确保在播放大幅削减动画的确切时刻损坏敌人 -在向上跑和向后跑之间的某个时间点。 在隐形游戏中,您的角色可以潜行并与世界上的计算机和按钮互动。也许有一个按钮可以关闭您正在渗透的哨所的电源。当按下动作按钮时,您的角色伸出手并按下按钮,然后返回其闲置状态。您希望在按下按钮时在“ push_button”动画中的确切位置关闭灯。 诚然,我的情况最类似于第二个示例,在该示例中,我创建了一个动画,其中基于回合的角色在攻击过程中前冲,并且我希望在动画似乎与之接触的那一刻施加损害。因为我的游戏使用回合制(想像“最终幻想”或“火焰纹章”之类的东西),所以我需要伤害/治疗/魔法/等。即使我实际上没有使用碰撞/命中框,也可以在每个角色动画的正确时间应用它。 我应该提到的是,我正在使用流行的游戏引擎来制作游戏,而现在我正在通过使用他们的动画事件来处理该事件,或者通过通知来实现接近预期结果的效果-我的角色执行了某个命令并触发了特定于命令的动画(即:“ attack_command”)和我的每个命令的动画资产必须在我的角色ExecuteCommand函数中包括一个动画事件/通知“回调”。换句话说,角色告诉攻击动画播放,然后攻击动画会在动画发生的确切时间向角色发出事件/通知回调,该事件应在造成伤害时进行。 坦白地说,这暂时有效,但是感觉有点不对劲 -就像我在这里遗漏了一部分大图!这种方法感到不对的部分原因是,它将游戏逻辑与动画资产结合在一起。如果我的动画素材资源忘记包括ExecuteCommand()事件/回调,则该命令将无法正确执行,并且需要额外的代码来检查命令动画是否在不执行命令的情况下完成。这太乱了,这意味着我的游戏对其资产有奇怪的依赖性。当然,我希望在攻击动画期间的特定时间点造成损害,但是我对在动画资源中调用游戏代码感到很奇怪。 那我在这里俯瞰什么?有什么好的通用技术可以处理这些类型的情况,您希望在动画中的特定时间发生某些重要的游戏操作? 编辑:澄清一下,这不是引擎特定的问题,我也不是在寻找引擎特定的设计/技术。我对一种通用的动画/游戏同步技术很感兴趣,而无论使用哪种技术,这些技术都可能会在您的游戏项目中使用。

3
在Unity3D中防止刚体跳跃力和弹跳幅度的组合
我正在Unity3D中构建一个相当简单的大理石赛车游戏。球是仅在X和Y轴上移动的3D物理对象。它具有左右滚动和跳跃的能力。非常基本的东西,除了我遇到了打破比赛的问题:当摔倒并撞击地面时,球的反弹幅度可以与其弹跳力相结合,从而产生超高跳跃。这意味着,通过适当地按下按钮,玩家可以使球反弹得更高,达到意想不到的高度。在解决此故障之前,我无法正确设计关卡。我已经说明了这个示例: 但是,跳跃并不像直接将球向上射击那样简单。为了简化关卡设计中的复杂性,我将跳跃角度编程为相对于球在其上滚动的表面。 图3是该游戏到目前为止的工作方式;没有图4。这使解决弹跳问题变得更具挑战性,因为我不能简单地测量和设置Y轴上的精确力或速度。这样做会导致怪异的行为,当球在陡峭的斜坡上行驶时,这种行为会变得更加明显。 到目前为止,我已经能够构思出该游戏中所有其他设计问题的解决方案,然后找到如何对它们进行编程的方法,但是这使我陷入了困境。我尝试了许多不同的方法,但是没有一个起作用。 这是控制球跳动的C#脚本: using UnityEngine; using System.Collections; public class BallJumping : MonoBehaviour { public System.Action onJump; public Rigidbody objRigidbody; // Set this to the player public bool isGrounded; // Determines whether or not the ball is on the ground public Transform groundChecker; // A child object that's slightly …
10 unity  c#  physics  jumping 


2
我需要什么才能收到Valve的付款?
我是俄罗斯的开发人员,最近通过了Steam Greenlight。 现在我处于Valve程序注册阶段。根据我在Valve表单中看到的内容,没有必要创建公司(例如LLC),这里有“独家所有者”选项。所以我决定选择这个。 问题很简单,但后来我遇到了两个障碍:有关我的银行帐户的信息和有关税收的信息。 至于税收,我想我该怎么做。我需要在IRS中申请EIN,然后填写W-8BEN表格。 但是银行账户是不同的野兽。我无法决定要使用哪种类型的银行帐户。创建简单的银行帐户就足够了,就像您在日常生活中使用的那样?该帐户应使用哪种货币?俄罗斯卢布还是美元?卢布对我来说更可取,但是创建美元银行帐户不是问题。我根本无法决定哪个更好。 如果一些非美国(也许还有美国:))独立开发者分享有关此方面的知识,那将是很棒的。再次,我最重要的问题: 1)您是否在不创建任何形式的公司的情况下使用“独资经营者”选项?这确实合法并且可以接受吗? 2)可以使用普通银行帐户接收Valve的付款吗?如果是,那么您的帐户使用哪种货币? 仅当您对此有绝对把握时(例如,您已经在使用此方案并从Valve至少收到了一笔付款),请回答。 提前致谢!
10 legal  steam 

2
将第三人称相机旋转到目标
我有一台第三人称相机,它不直接看玩家,而是在他面前的某个地方。 当用户进入拍摄模式时,我希望相机转向播放器以面对目标。 在上图中。“ O”是玩家(来源),“ L”是角色,“ C”是摄像机位置,“ T”是目标。我想旋转后视线C-> L,以使其绕原点(“ O”)经过T(C'-> L'-> T')。 基本上,我需要找到在图片中以红色显示的角度alpha。 我将相机位置存储在这样的结构中: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } 因此,如果可以找到所需的角度,则可以执行以下操作: cam->absoluteRotation = cam->absoluteRotation * alpha; 为了让玩家始终注视目标。 如果look望通过原点,我可以简单地做 Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion …


2
如何在动态变化的网格上投影泡沫轨迹
我正在尝试创建水,现在我通过在网格物体上动态生成波浪来获取水。但是现在我想让我的船操纵这些波浪,并在此之上引起开尔文唤醒。 事实是我使用不同的瓷砖生成水,并动态重复相同的图案。那么,如何在动态生成的网格(平面)之上生成此内容呢?是否还没有操纵其他图块(平面)?
10 c#  unity  rendering 

4
在Box2D(libGDX)中创建近战武器
我正在努力实现一种近战武器,该武器可以在按下键时摆动。 我正在想象两种不同的攻击方式(刺和挥杆) 我尝试创建两个固定装置(角色+武器),两个不同的物体,两个不同的物体+旋转关节,但是我无法对其进行编码,使其行为符合我的想象。 刺: 因此,只要按一下按钮,身体/固定装置(传感器)就会出现约1秒钟,然后消失(或者,身体/固定装置始终可以位于英雄身上,并且在按下时围绕顶点旋转90度,并且然后旋转回正常) 摇摆: 同样,但是现在武器将从顶部开始向下旋转。武器也将成为传感器。 我尝试过的 我创建了两个动态物体。 武器必须跟随英雄,因此我使用了旋转关节将它们固定在一起。当按键时,我将武器的角速度设置为一个数字。但是,放开钥匙后,武器将继续旋转。我尝试执行if检查(如果角度大于___,请将角速度设置为零)。但是,这仅意味着当我再次按下该键时,武器将停止旋转。
10 java  libgdx  box2d 

5
如何正确在相机后面投射点?
我正在制作3D游戏,在其中将感叹号放在关注点上方。 为了找出应该在2D屏幕中放置标记的位置,我手动将3D点投影到标记应放置的位置。 看起来像这样: 看起来还不错 当标记位于屏幕之外时,我只需剪切坐标即可使其适合屏幕。看起来像这样: 到目前为止,这个想法进展顺利。但是,当关注点在相机后面时,得到的X,Y坐标将反转(正/负),并且我将标记显示在屏幕的对角,如下所示: (投影然后夹紧的点是标记的尖端。不要介意标记的旋转) 这是有道理的,因为平截头体后面的坐标在X和Y中是反转的。所以我要做的是在它们位于摄影机后面时反转它们的坐标。但是,我仍然不知道将坐标反转时的确切条件是什么。 当前,这是我的投影代码的样子(在带有SharpDX的C#中): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, …

1
利用游戏循环和openGL之间的多线程
在基于openGL渲染器的游戏环境中交谈: 假设有两个线程: 更新游戏中对象的游戏逻辑和物理等 根据游戏对象中的数据对每个游戏对象进行openGL绘制调用(线程1不断更新) 除非您在游戏的当前状态下每个游戏对象都有两个副本,否则您必须暂停线程1,而线程2进行抽奖,否则游戏对象将在该对象的抽奖中途更新。是不可取的! 但是停止线程1以安全地从线程2进行绘制调用会杀死多线程/并发的整个目的 除了使用成百上千或同步对象/围栅之外,还有没有更好的方法可以利用多核体系结构提高性能? 我知道我仍然可以使用多线程为尚未成为当前游戏状态一部分的对象加载纹理和编译着色器,但是如何在不影响绘制和更新的情况下对活动/可见对象执行此操作? 如果我在每个游戏对象中使用单独的同步锁怎么办?这样,任何线程都只会阻塞一个对象(理想情况),而不是整个更新/绘制周期!但是在每个对象上锁定(游戏可能有上千个对象)的代价是多少?

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.