CryENGINE

Русское сообщество

Глава 9: Игровая Логика.

Автор перевода GROZ-z-ZA

Глава 9: Игровая Логика.

В этой главе мы рассмотрим:

Как луч игрок в тег точки запуска
Как заставить идти AI к точке, когда игрок входит в тригер
Отладка Потокового Графа (Flow Graph)-(в дальнейшем FG).
Создание счётчика убийств.
Награждение игрока после убийства цели.
Отображение здоровья игрока посредством FG.
Изменение камеры игрока с клавиатуры.
Создание таймер обратного отсчета.
Создание звукового события.

Введение:
  Когда мы исследовали большую часть внешних скриптов, мы должны разобрать внутреннюю работу игровой логики, которая работает и настраивается через FG. Он является одним из наиболее мощных инструментов любого дизайнера, в этой главе мы будем исследовать некоторые из примеров которые можно создать используя FG.
  Перенос игрока в тег точку из триггера.
В этом рецепте, мы продемонстрируем основное использование триггера, а затем разберём телепортацию игрока в определённую точку после входа в триггер.

Как это сделать...

1. В RollupBar, нажмите на Entities кнопку.
2. В вкладке Trigger выбирете ProximityTrigger
3. Ставьте на карту ProximityTrigger, затем внесите в настройки следующие изменения:
DimX = 10
DimY = 10
DimZ = 5
OnlyPlayer = True
4. Создайте пометку (платформу на которую вы должны зайти-чтобы видеть место)- мы использовали SOLID с размерами 10x10x1.

5. Поместите на карту тег который указывает координаты перемещения.
6. В RollupBar, нажмите на вкладку AI.
7. От Типа Объекта, выберите Tagpoint.
8. Поставьте тег точку в нескольких метрах от триггера

9. И, наконец, мы должны создать логику в ФГ, чтобы вызвать событие для игрока.
10. Щелкните правой кнопкой мыши на ProximityTrigger | Создать Flow Graph.
11. Имя Flow Graph - Beam_Trigger и нажмите кнопку OK.
12. Вернитесь в редактор просмотра и выберите ProximityTrigger.
13. Откройте Flow Graph редактор снова и выберите ProximityTrigger в
FG иерархии.

Примечание:
Вы можете заново открыть Flow Graph
Tool Bar | View | Open View Pane | Flow Graph.

14. Щелкните правой кнопкой мыши на Открытое пространство (серое поле покрытое сеткой) и нажмите кнопку Add Selected Entity.
15. Повторите шаги с 3 по 5 для тэга точки.

Примечание:
Вы также можете выбрать несколько объектов и добавить их все в FG

16. Щелкните правой кнопкой Add Node | Entity | Beam Entity.
17. Затем щелкните правой кнопкой Add Node | Game | Local Player
18. Повторите всё как на рисунке .

Примечание:
  Node состоит из 2 частей (левой и правой). Левая часть отвечает за приём сигналов. Правая же часть отвечает за подачу сигнала.
  Чтобы создать связь между нод*ами, надо: щёлкнуть левой кнопкой мыши на нужный выход и удерживая перенести стрелку на нужный вход.



Теперь каждый раз, когда игрок заходит в определенный ProximityTrigger , игрок будет переносится в определённую тег точку.

Как заставить идти AI к точке, когда игрок входит в триггер

В этом рецепте, мы продемонстрируем, как вы можете быстро дать команду GOTO к AI (Искусственный Интеллект) когда игрок попадает в триггер.

Приготовление…
1- Запустить уровень.
2-Завершить предыдущий урок.
3-Поставить на карту Grunt ( entity/ai/grunt )

Как это сделать...

1. Во-первых, создайте ProximityTrigger и платформу как в предыдущем уроке.
2. Затем положите AI тег (Tagpoint), в ProximityTrigger.
3. Далее, создаем новый ФГ из ProximityTrigger. И называем ФГ - AI_Goto.
4. В рамках ФГ, создать следующий скрипт:



С этим FG. AI должен пойти к TagPoint как только игрок войдёт в триггер.( Он перестанет идти если увидит игрока)

Отладка Flow Graph

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

Приготовление…
Для начала этого урока вы должны пройти предыдущие уроки.
Запустите уровень в редакторе.
Откройте окно FG
Щелкните на значок напоминающий жука.

 

Как это работает...

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

 

Дополнительно…
Для отчистки информации после режима отладки нажмите на значок Корзинки которая рядом с «жуком»




                                                                                  Создание счётчика убийств
В этом рецепте, мы рассмотрим один из вариантов счётчика убийств.

Логический скрипт состоит из нескольких частей.
1-Game:LocalPlayer – он используется для того чтобы узнать ID игрока.
2-Crysis:HitInfo - используется для решения многих задач – в этом примере мы узнаем ID мишени.
3- Entity:Grunt – нод от бота.
4- Math:Counter – нод из математической категории – счётчик. (считывает количество поданных на него импульсов)
5- HUD:DisplayDebugMessage – вывод информации на экран (латиница, символы, цифры)

Теперь мы соберём мы схему.

Как это работает...

1- С помощью Game:LocalPlayer мы передаём ID игрока Crysis:HitInfo.
2-из Crysis:HitInfo мы узнаём ID «жертвы»
3- Когда «жертва» погибает импульс идёт на счётчик который выводит сигнал на экран игрока.

Награждение игрока после убийства нескольких игроков

В этом рецепте мы доделаем предыдущий скрипт. Мы сделаем так, после убийства нескольких НПС игрок получит вознаграждение.

Начнём. Нам понадобится предыдущий скрипт, и следующие элементы.
1- Math:Equal – нод сравнения A и Б. Если А = Б то правда. Иначе ложь.
2- Inventory:AddItem – нод через который игроку можно дать определённый элемент инвентаря после определённого действия.

Теперь мы соберём мы схему.

Как это работает...

1-часть прошлой схемы.
2-по достижению определённого количества убийств ( установленного в Math:Equal под переменной B) идёт сигнал в нод Inventory:AddItem который даёт игроку ранее указанное оружие или другой элемент инвентаря)

Примечание:
Вы заметили вокруг схем прямоугольники - это комментарии.
Для установки ПКМ-> Add Comment Box.

Отображение игрока здоровья населения посредством Flow Graph

В текущей версии CryEngine 3 отсутствовал HUD ( после нескольких обновлений в CE3 появилась поддержка Scaleform*а , а значит и привычного нам всем HUD*а)

Вырезка из WIKI : Heads-Up Display (сокр. HUD) — термин в компьютерных играх, который обозначает часть графического интерфейса пользователя, служащего для отображения важной информации непосредственно во время игрового процесса


Мы сделаем простой индикатор здоровья персонажа.

Нам понадобится:
1-Game:LocalPlayer
2- Time:Timer – генерирует импульс в определённые промежутки времени.
3- Game:ActorGetHealth – показывает здоровье игрока/ НПС в момент подачи имульса
4- HUD:DisplayDebugMessage

Теперь мы соберём мы схему.

Как это работает...

Time:Timer генерирует импульсы ( в примере раз в 0.05 секунды). Импульс идёт на Game:ActorGetHealth. Из него идёт как текст в HUD:DisplayDebugMessage

Примечание:
Возможно вам придётся изменить параметры «X» и «Y» в HUD:DisplayDebugMessage – если вы используете несколько HUD:DisplayDebugMessage

Изменение камеры игрока после нажатия на кнопку

В этом примере мы разберём пример переключения камеры после нажатия на кнопку.

P.S.– Автор перевода на русский язык изменил статью. Это было сделано для того чтобы исправить ошибки издателей книги. В изменениях мы добавили несколько дополнительных функций.

Нам понадобятся следующие элементы:
1-Misk:Start– генерирует одиночный импульс при запуске карты.
2-Input:Key– считывает нажатие определённой клавиши на клавиатуре, джостик, мышке и других контролёров.
3-Logic:Sequentializer- последовательная подача импульсов.
4-System:ConsoleVariable- установка команды для консоли с значением.(5 штук)

Как это работает...

1-При запуске карты происходит запуск команд которые делают возможной поддержку камеры от 3 лица и поддержку сдвига камеры в стороны.
2-При нажатии на кнопку «C» -установленной в Input:Key происходит переключение между видом камеры (Logic:Sequentializer он переключает между командами)


Создание обратного отсчёта.

В этом последнем уроке в этой главе мы рассмотрим создание таймера обратного отсчёта- 60 секунд.

Нам понадобятся следующие элементы:
1- Misk:Start
2- Math:SetNumder – установка математического числа.
3- Math:Sub – Математическое действие ( разница)
4- Game:LocalPlayer
5- HUD:DisplayDebugMessage
6- Time:Timer
7- Math:Counter – Счётчик
8- Math:Equal – сравнение.



Как это работает...

1-При старте игры математическое значение из нода Math:SetNumder идёт к Math:Sub A
2-Импульс из Time:Timer идёт с периодичностью раз в секунду идёт к Math:Counter а от него к Math:Sub B
3- в Math:Sub происходит математическое действие А-B .
4- результат из Math:Sub идёт на экран HUD:DisplayDebugMessage
5- Значение из Math:Counter идёт на Math:Equal и при достижение значения 60 остановит отсчёт и произведёт действие.

Скачать в PDF

Взаимодействие с окнами и панелями инструментов
Глава 8: Создание транспортных средств.