确定NPC将采取什么行动,何时是部分随机但受偏好影响?

时间:2010-05-13 02:38:51

标签: artificial-intelligence

我想让游戏中的角色执行部分随机但也受首选项影响的动作。例如,如果一个角色感到愤怒,他们就会比说笑话更有可能大喊大叫。所以我正在考虑如何确定角色将采取的行动。以下是我的想法。

解决方案#1 :迭代所有可能的操作。对于每个操作执行随机滚动,然后将首选项值添加到该随机数。具有最高值的动作是角色所采用的动作。

解决方案#2 :为动作指定一系列数字,更有可能采取更广泛的动作。因此,如果随机滚动从1-5返回,该角色将讲述一个笑话。如果它返回6-75,他们会大叫。等等。

解决方案#3 :对所有操作进行分组并创建分支树。他们会采取友好行动还是敌对行动?随机滚动(添加了偏好值)表示敌意。他们会进行身体攻击还是言语?随机翻卷说话。继续走下去,直到你采取行动。

解决方案#1是最简单的,但效率不高。我认为解决方案#3有点复杂,但效率不高吗?

有没有人对此特定问题有任何了解? #3是最好的解决方案吗?有更好的解决方案吗?

3 个答案:

答案 0 :(得分:5)

#1和#2很简单,但可能无法很好地扩展到更复杂的行为。行为树(#3)似乎是当今许多游戏中的首选系统。您可以在AiGameDev.com上找到一些演示文稿和说明,例如: http://aigamedev.com/open/coverage/paris09-report/#session3http://aigamedev.com/open/coverage/gdc10-slides-highlights/#session2(来自Crytek的第一个非常好)

在CPU使用方面,您可能不需要担心“效率”,因为这不太可能成为游戏中的主要瓶颈。减少调整行为所需的程序员/设计人员时间更为重要。

答案 1 :(得分:1)

如果您要使用选项1或2,请查看随机结果的存储桶 - 请参阅Randomness without Replacement。如果你采用树形动作,你仍然可以使用一些相同的概念来确定树的哪个分支向下;但是,你内置了更多的确定性,因为当你遍历树时你的选择会受到限制。

如果我没记错的话,拥有相当不错的NPC脚本引擎的Neverwinter Nights将使用随机概率来确定他们的NPC在某些状态下会采取的一些行动,但是状态本身更多是由该NPC的脚本(更多的是状态机而不是树,但概念类似)。例如,如果NPC正在行走,他们有可能会停下来,也许会笑,等等 - 但如果他们受到攻击,他们会转而战斗并留在那里。

换句话说,这完全取决于你的行为是什么,以及你希望角色的行为方式。

答案 2 :(得分:1)

Markov链,受真实用户操作的影响。

来自维基百科:

  

马尔可夫链是一个离散的随机链   具有该属性的进程   下一个状态仅取决于当前状态   状态。