游戏开发

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

2
如何自定义自动生成的脚本?
通过Unity编辑器创建脚本时,它会生成带有一些预格式化代码的脚本。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class GenericClass : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } 创建脚本时,通常可以保证使用其他代码,例如名称空间或自定义编辑器。此外,我几乎总是从自动生成的脚本中删除内容。有没有办法更改Unity生成的自动代码?
11 unity 

2
自上次git commit以来,如何以视觉方式查看对场景所做的更改
在将它们提交给git之前,我想查看在场景(.unity文件)中所做的更改。 我研究了几种GIT / Unity解决方案,但所有这些解决方案都是为了合并更改,而不是为了与上一版本显示差异。 场景文件的问题在于它们使用指向其他资产的GUID,而当我打开一个场景文件的差异时,我无法真正使用它进​​行任何处理。 例如: 相反,我想看到这样的东西: 有什么可以做到的吗?

2
在游戏中如何进行结构分析(例如:桥梁建筑,挖掘或死亡以及3D)?
据我了解,典型的交互式桁架系统将需要进行大量计算,因为每个组件都会影响整个系统。我认为您可以在仿真中以准确性为代价随意停止给定的迭代次数,但是我不知道这些游戏是否使用了这种方法(桥梁游戏是桁架系统的一个示例)。另一方面,像Dig或Die这样的游戏具有非常复杂的结构系统,该系统还考虑了扭矩(我认为)和压缩,并且运行速度非常快,并且可以在非常广泛的系统上运行。我猜基本计算可能是相似的,但是如果没有,我对两种方法都感兴趣。 你们知道这些是怎么制成的吗?它们有任意限制吗?还是完全使用了不同的算法?另外,我想你们想出的任何方法都可以应用于3D系统,但如果不是,或者如果不明显,请至少提供一个有关如何将其用于3D的线索,因为我对2D和3D都感兴趣游戏。 我知道我不应该在这里感谢,但是我发现不至少要感谢您的时间是不公平的,我希望不要删除此段。 编辑:如果我要猜测,我会说Dig或Die为每个块存储矢量,然后运行一个迭代算法,直到模拟的额外精度对于系统的限制毫无意义(例如,系统太大而无法崩溃),因此受到半任意(因为它基于应用程序)迭代次数的限制。但是我可能是错的。

2
2D降雨创建(和流体动力学)
我在一个我的游戏中试验天气条件,Starbound处理雨的方式给我留下了深刻的印象。基本上,当雨水撞击地面时,它要么水平分散(并被地面吸收),要么会产生一堆水(当雨滴落在地面上的洞中时)。 该视频清楚地展示了这一点:http : //imgur.com/gallery/CKCGKbG 我知道如何使雨水落下并检查雨水落在地面上的位置,但这就是我被卡住的地方。我的问题是:如何创建?怎样才能完美地模拟水流而又不影响性能呢? 提前致谢!

3
如何使自然的雨滴落在屏幕上?
我试图通过金属球和屏幕上的雨痕使雨滴效果下降。我在阴影中找到了线索,但我不知道如何实现: https://www.shadertoy.com/view/ltffzl 不幸的是,它有很多数学计算,我不能统一使用它,因为它会产生滞后。显然我应该使用纹理,但是如何产生拖尾效果呢?! 我的想法是使用纹理和尾迹渲染器进行拖放,但是如何产生元弹效果? 更新资料 我可以通过本文实现Metaballs https://github.com/smkplus/RainFX/tree/master 但我还不知道线索

2
如何等待异步操作/协程?
我正在寻找一种通用/可重用的方法来等待协程和异步操作在Unity 5中完成,类​​似于C#5的await关键字。 我能想到的最简单的方法是这样的: public class SomeUtility { public bool IsDoingSomething { get; private set; } public IEnumerator DoSomethingAsync() { IsDoingSomething = true; yield return new WaitForSeconds(2); IsDoingSomething = false; } } 然后在另一个协程中: while(!someUtilityInstance.IsDoingSomething) yield return null; 但是,这不是很好,因为它会使while语句变得混乱,不可重用(即使是简单的实用程序功能,也需要实例和专用的类!)以及很多甚至不需要的单例或静态内容。 我发现最接近的是使用Unity的AsyncOperation。这在这里很好地工作: public static IEnumerator Await(this AsyncOperation operation) { while(!operation.isDone) yield return operation; } …


2
消除按键开始时的延迟
我正在做一个简单的游戏,遇到的问题之一是连续按下键时令人讨厌的延迟。 因此,基本上,例如,当我按下(很长时间)时Up,我的对象将向上移动1个单位,而不移动(大约1秒钟),然后连续向上移动1个单位(没有任何延迟)。 当前,我使用它来移动对象(SDL2): while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_UP: //Move object 1 unit up break; //Other unrelated things omitted } break; //Omitted other cases } } 我想要的是消除延迟,以便对象可以立即Up快速移动。有什么办法吗?
11 c++  sdl2  keyboard 

5
在我的上下文中,如何改善随机数的生成?
在我的游戏中,屏幕顶部有一个单词,字母从顶部开始下雨,用户必须触摸字母才能完成单词。 目前,我正在随机生成字母(实际上随机数和数字是字母数组的索引。例如:0 = a,1 = b),但问题是花太多时间才能获取所有必需的字母才能完成字。 我想要的是,我生成的随机数应该更频繁地生成所需的字母,这样玩家就不必花一整天的时间来完成一个单词。 我尝试了以下方法: 检测单词中的所有字母(单词始终为6个字母),生成长度为6的索引数组,将数组的每个索引分配给从letter-2到letter + 2的随机数,最后随机选择一个索引从数组中显示出来。 有一个选择器变量,其值在[0..2]范围内,是随机生成的,如果选择器== 0,则检测组成该单词的字母并随机选择一个字母,否则从az中随机获取任何字母。 这两种方法都没有为我提供任何帮助。如果您能帮助我,我将非常高兴。 感谢您阅读本文,希望您理解该问题,我们正在等待答复。
11 random 

2
如何用客户端预测来补偿运动对象?
我正在实现一个支持类似Star Control的近战游戏服务器。因此,您有飞船和射击船,它们具有超简单的速度/加速度/减震物理原理来驱动运动。 我已经阅读了Valve,Gafferon和Gambetta,并实现了Gambetta的算法来进行客户预测: 客户端预测通过在服务器上更新其位置来对玩家船进行工作,然后将服务器尚未处理的输入重新应用于玩家船。 不幸的是,它不适用于我的游戏。我认为这与Gambetta的示例没有考虑已经移动的对象或逐步更新的命令有关。(“步”是指帧)。因此,在我的游戏中,玩家抬起脚来加速(已经移动)的飞船,该飞船在客户端上继续移动,将命令发送到服务器,通常在下一步从服务器接收世界快照。我得到更多类似的东西: 该播放器命令在客户端步骤3运行,但在服务器上仅在服务器步骤5运行。到客户端在客户端步骤6接收到世界快照时,该预测已经完成,尤其是在速度更快的情况下。 问题的症结在于客户端在步骤5运行命令,而服务器在步骤6运行命令。我考虑过可能会使用命令发送客户端步骤,并让服务器回滚并使用客户端时间步骤重新运行命令。但是,这可能会导致许多其他问题-例如自回滚以来收到的命令发生了什么,或者作弊客户端如何通过更改发送的步骤来加以利用。 从Google 读取和观看此类视频时,提到了一种不同的方法,您可以逐步更改播放器的位置,以使其与快照的位置匹配。 我的问题: 您能使Gambetta的算法以恒定的步幅运行吗?还是在概念上与我的游戏不兼容? 那么逐步逐步插值是正确的方法吗?如果是这样,您如何从客户位置插值一个已经移动的对象以匹配刚从服务器接收到的对象? 这些方法,渐进插值法和Gambetta算法可以串联使用,还是互斥?

2
如何创建2D“粘性” /“粘性”分离效果?
我想创建一个类似于此动画的效果,其中两个形状会随着时间的流逝而分开,但是(通过一次)通过拉伸并最终断裂的粘胶连接在一起(一次)。像披萨奶酪,但特别是二维。 我正在使用Swift和SpriteKit。我认为这可能涉及关键帧贝塞尔曲线动画,但是我不确定。我怎样才能达到这种效果?
11 animation 

4
人们将如何为3D世界生成导航网格?
我正在尝试找到此问题的解决方案。我正在尝试以一种锁定为x,y地板坐标的顶点网格的形式构建导航网格,并以3D空间的正方形的形状。但是我在尝试找出解决方法时遇到了问题。 我尝试查看Recast库。这是一种非常健壮的方法,但是随着较大的地图和开放空间,它显然会变慢。我也不知道它们如何通过高度图为世界空间生成顶点和边缘。 我的下一个想法是做虚幻引擎3曾经做过的事情。 https://udn.epicgames.com/Three/NavigationMeshReference.html 使用光线投射生成网格。我不知道如何停止射线广播。 所以...我的下一个选择是包装盒,可能是包装盒。创建一个细分的体积,其大小为2的幂。将框与网格对齐,然后向下射矩形棱镜作为射线。如果它落在作为地面一部分的几何图形上,并且矩形未相交,则在此处保留正方形。并继续向下直到达到音量范围。为了检查是否需要链接边,我想我可以检查一下两对顶点之间的坡度是否在可行走坡度之内,如果为真,请合并它们。 我的主要问题是...这似乎不是最佳选择。不用考虑,多层过程的估计过程为O(N ^ 3)。哪个会变得很讨厌。 最后一点是用于自动创建这些正方形的矩形组。我不太确定该怎么做。虚幻实现通过斜率将它们分开。但是,我试图保持网格格式。因此,这并非完全必要。问题仍然在于创建较大的矩形图块以将路径查找过程拆分为每个图块的基础。磁贴不能太大也不能太小。 所以问题是... 生成此网状导航网格的有效方法是什么?制作图块的好方法是什么?
11 c++  tiles  navmesh 

2
PBR和SSR有什么区别?
我对游戏开发非常陌生,我一直试图了解屏幕空间反射和基于物理的渲染之间的区别。 我已经读过有关PBR的知识,据我了解,它试图模仿光在现实生活中的反射方式,这通常是根据材料的类型将其分为两个部分,镜面反射和散射。 至于SSR,如果我错了,请纠正我,这是表面反射的样子。 如果我对SSR的理解是正确的,那么它们是否在某种程度上是相同的?我的意思是,反射在表面上的外观是否取决于表面粗糙度等,这将影响镜面反射的光量和扩散反射的光量。再次,请在我错的任何地方纠正我。

2
如何使用SDL计算增量时间?
我听说您可以使用两个名为SDL_GetPerformanceCounter和SDL_GetPerformanceFrequency的函数来计算增量时间。我不确定它们如何完全工作,但我听说它有点类似于使用SDL_GetTicks() Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 我有这段代码,但是每当我打印出deltaTime或尝试使用它时,它总是等于一些真正的随机和疯狂数字。这个对吗?
11 c++  algorithm  sdl 


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.