Я пытаюсь найти хороший способ написания скриптов для неигровых персонажей в моей RPG. Пример взаимодействия NPC может выглядеть примерно так:
- NPC начинает диалог # 1 с игроком.
- Когда диалог заканчивается, NPC перемещается к путевой точке на карте.
- Как только NPC прибывает в путевую точку и игрок снова разговаривает с ним, он начинает диалог # 2.
- В конце диалога NPC задает вопрос.
- Если игрок дает ответ А, диалог заканчивается. В этом случае при разговоре с 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 находятся в сцене каждый раз, когда я загружаю новую сцену. Я не против того, чтобы делать это с XML, как это, но я не хочу тратить кучу времени на то, чтобы идти по этому пути, если есть лучший способ сделать это.
Так как этот тип поведения распространен во многих играх, есть ли хороший способ сделать это в Unity без необходимости домашнего приготовления моей собственной сложной системы?