【问题标题】:Controlling NPCs throughout the plot line of a game控制整个游戏情节中的 NPC
【发布时间】:2018-11-06 12:41:39
【问题描述】:

我正在尝试找出一种在我的 RPG 中编写 NPC 脚本的好方法。一个示例 NPC 交互可能是这样的:

  1. NPC 开始与玩家对话 #1。
  2. 对话结束后,NPC 会移动到地图上的一个路径点。
  3. 一旦 NPC 到达路径点并且玩家再次与他交谈,他就会开始对话 #2。
  4. 在对话结束时,NPC 提出了一个问题。
    • 如果玩家给出响应 A,则对话结束。在这种情况下,再次与 NPC 对话会再次启动对话 #2。
    • 如果玩家给出响应 B,NPC 会向玩家提供一个物品,然后消失。从现在开始,同一个 NPC 将出现在不同的 Unity 场景中。

我找到了很多制作对话树的示例,但我找不到处理此类复杂情况的好方法。最具挑战性的问题之一是确定 NPC 是哪个场景以及场景中的哪个位置。根据玩家在游戏中的距离,该 NPC 可能会出现在许多不同场景中的任何一个场景中,并且会有不同的对话和行为。

由于 Unity 可以轻松地将脚本附加到我的 NPC 的游戏对象,我当然可以通过 C# 脚本来完成这一切。但是,对于重要的 NPC,该脚本会变得非常庞大和混乱。

到目前为止,我所走的路径是创建一个 XML 文件。像这样的:

<AgentAi>
   <ActionGroup>
      <Dialog>
         <Statement>Hi!</Statement>
         <Statement>Follow me.</Statement>   
      </Dialog>
      <MoveTo>Waypoint_1</MoveTo>
      <SetNpcState>NpcGreetedPlayer</SetNpcState>
   </ActionGroup>
   <ActionGroup>
      <Conditions>
         <State>NpcGreetedPlayer</State>
      </Conditions>
      <Dialog>
         <Statement>Here, take this.</Statement>  
      </Dialog>
      <AddItem>Dagger</AddItem>
      <MoveTo>Waypoint_2</MoveTo>
   </ActionGroup>
</AgentAi>

该样本会导致 NPC 向玩家打招呼并移动到另一个位置。然后当玩家再次与他对话时,NPC会给玩家一把匕首并移动到另一个路点。

XML 的问题是我担心它对于重要的 NPC 会变得非常大,根据玩家在游戏中的位置,这些 NPC 可能会出现在很多不同的地方。每次加载新场景时,我都必须动态确定场景中的 NPC。我并不完全反对像这样使用 XML 来做这件事,但如果有更好的方法,我不想在这条路上浪费大量时间。

由于这种行为在很多游戏中都很常见,在 Unity 中是否有一种无需自制复杂系统的好方法?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    一旦复杂程度变得太高,普通软件系统就会使用数据库。

    我会使用数字参考设置故事情节,就像书页一样。
    如果他们在没有交互的情况下达到更高的数字,那么交互仍然可用。

    然后您可以将每个交互设置为单独的事物,并带有开始和结束编号(之前不可用,之后不可用)。

    也许您可以通过将 xml 文件分开来做到这一点,但我认为您仍然需要将它们与故事情节联系起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多