我正在尝试找到一种在RPG中编写NPC脚本的好方法。 NPC交互示例可能如下:
我找到了很多制作对话框树的例子,但是我找不到解决这种复杂情况的好方法。最具挑战性的问题之一是确定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。我并不完全反对这样的XML,但是如果有更好的方法,我不想浪费很多时间。
由于这种行为在很多游戏中都很常见,因此在Unity中是否有一种很好的方法可以不必自制自己的复杂系统呢?
答案 0 :(得分:0)
一旦复杂度过高,普通软件系统就会使用数据库。
我会使用数字参考来设置故事情节,就像一本书的书页一样。
如果他们在没有互动的情况下获得更高的排名,那么互动仍然有效。
然后,您可以将每个互动设置为单独的事物,并带有一个开始和结束编号(之前不可用,之后不可用)。
也许您可以通过将xml文件分开来实现此目的,但是我认为您仍然需要将它们绑定到故事情节中。