您如何为游戏中的“气味痕迹”建模?


11

假设您要创建3D游戏,并且让玩家或手机能够通过追踪他们的气味来吸引其他实体。是否存在与此用例相匹配的已知数据结构?

如果您只有很少的人,您可能可以做类似3D坐标到实体ID的映射的操作,但是实际气味的工作方式有所不同,因为它会随着时间的流逝而逐渐消失。而且在大多数时间里,您只能大致了解到那里发生了什么,以及大概有多少种该类型的东西在那里发生了。随着时间的推移,这种近似变得最糟,直到消失。

我想这有点像以一个确切的数字开头,然后慢慢地删除最低有效数字,直到您也失去了最高有效数字。但这并不能真正帮到我,因为实体ID除了单独的ID外,通常不会编码为包含实体类型。


矮人要塞(Dwarf Fortress)在下一个版本中正在做类似的事情。
罗素

Answers:


10

如何执行此操作的方式多种多样。我将建议“对我来说显而易见”的选择,但是可以设计很多变体。免责声明:我实际上还没有实现这样的事情。

首先,您需要一个覆盖您整个世界的数据结构。如果要在3D空间中进行NPC移动,则可能具有或最终将需要这种结构来进行寻路(例如,导航网格)。因此,假设我们可以为此添加一个气味字段。

那么,我们在那个领域要投入什么呢?我提出了一个记录清单(气味强度时间)。此清单保持在最大长度以下,并按强度排序-因此,弱味将被丢弃。该气味可能是为每个实体或实体类型明确定义无论什么东西,或者它可能仅仅是实体类型-这取决于你希望能够清楚地跟踪什么。该时间是该香气记录的最后更新时间的时间戳。

当实体通过某个区域(例如导航网格的给定三角形)时,该更新气味列表了。首先,根据经过的时间量(根据时间值与当前时间的关系)降低所有强度-在此,指数衰减可能是一个合理的选择。然后将当前实体的气味添加到列表中,强度可能取决于实体类型。然后,如果列表太长,则丢弃最低强度。

要获取跟踪结果,请在列表中找到当前位置的气味,然后对其所有邻居执行相同的操作,并沿最强气味的方向移动(这不是跟踪器刚来自的方向)。

对于额外的现实主义:

  • 扩散:定期将每个位置的一小部分气味转移到附近。这使步道混乱,但也意味着可以嗅出静止的东西(找到食物,尸体等)。(它甚至是公认的一种AI,它完全基于此类信息进行操作-格局提供有关获取特定资源的方式等信息,我忘了它的名字。)主要缺点是花费时间计算到处扩散。

  • 强烈的气味应防止发现弱气味;将所需气味的强度除以最强气味的强度,如果太小则失败。这可能会故意混淆一个人的气味。


9

我将修改一种称为影响力映射的技术以创建气味映射。它会自然消散和褪色,与其他气味混合并竞争,甚至更多。听起来这将完全满足您的需要,但是它可能比您想要实现的要复杂。至少它应该给您一些好主意,并且在您当前使用的任何结构之上实现起来都非常简单。

我发现一个教程/说明很有帮助。

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.