【发布时间】:2018-11-06 12:41:39
【问题描述】:
我正在尝试找出一种在我的 RPG 中编写 NPC 脚本的好方法。一个示例 NPC 交互可能是这样的:
- NPC 开始与玩家对话 #1。
- 对话结束后,NPC 会移动到地图上的一个路径点。
- 一旦 NPC 到达路径点并且玩家再次与他交谈,他就会开始对话 #2。
- 在对话结束时,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