Управление NPC по всей сюжетной линии игры - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь найти хороший способ написания скриптов для неигровых персонажей в моей RPG. Пример взаимодействия NPC может выглядеть примерно так:

  1. NPC начинает диалог # 1 с игроком.
  2. Когда диалог заканчивается, NPC перемещается к путевой точке на карте.
  3. Как только NPC прибывает в путевую точку и игрок снова разговаривает с ним, он начинает диалог # 2.
  4. В конце диалога 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 без необходимости домашнего приготовления моей собственной сложной системы?

1 Ответ

0 голосов
/ 06 ноября 2018

Обычные программные системы будут использовать базу данных, как только уровень сложности станет слишком высоким.

Я бы настроил сюжетную линию с числовой ссылкой, как страницы книги.
Если они переходят на большее число без взаимодействия, то взаимодействие все еще доступно.

Затем вы можете настроить каждое взаимодействие как отдельную вещь с начальным и конечным номером (недоступно до и не доступно после).

возможно, вы могли бы сделать это, разделив xml-файлы, но я бы подумал, что вам все равно нужно связать их в сюжетную линию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...