Реализовать ботов в игре-стрелялке на Unity+PUN
Кратко: Нужно реализовать ботов и интегрировать движок управления ботами https://assetstore.unity.com/packages/tools/behavior-ai/invector-fsm-ai-template-123618 в многопользовательскую игру-стрелялку (не обязательно именно этот движок)Подробно: Есть уже реализованная многопользовательская игра стрелялка, по сути team deathmatch. Кто-то запускает игру, остальные к нему присоединяются, игроки делятся на команды "красных" и "синих", у каждой команды есть своя база, на которых время от времени воссоздаётся военная техника (танки, БТР-ы, вертолёты) которой можно пользоваться. Игроки просто сражаются друг с другом команда на команду, пока не выйдет время уровня. В игре не хватает ботов, и для их добавления был приобретён готовый модуль Invector FSM AI Template, позволяющий задавать "логику" поведения ботов. Использовать прямо его не обязательно, если предлагаемую логику можно сделать самостоятельно, либо с помощью других модулей - можно и так. Особенности реализации: игра изначально написана на базе готового шаблона многопользовательского шутера на C# с использованием Photon Unity Networking (то есть НЕ Photon Phusion). Далее, какой-то сумрачный гений прикрутил к игре функционал работы со Steam и VK.com, и возможность покупать внутри-игровое золото во Вконтакте, а за него уже приобретать различное оружие и броню в игре. В результате, код игры делится на 2 части: большая часть относительно логичного кода, который присутствовал в исходном шаблоне + некоторое количество адского говнокода написанного уже "сумрачным гением". Далее, игра уже попала ко мне, и какое-то количество доработок в ней сделано мной + отрефакторен написанный на PHP сервер игры, хранящий информацию о покупках и внутриигровых достижениях. Сам я программист, но на C# пишу медленно (я больше по C++, Php, Python, Javascript), а в играх и в Unity разбираюсь гораздо медленнее чем в веб-серверах. В связи с чем нужна помощь разработчика на Unity + Photon. Что конкретно требуется: 1) Сначала дам посмотреть исходный код в GitHub, чтобы было понятно как обстоят дела, и стоит ли вообще за это браться. Уровень кода может вам не понравиться.2) Далее, если код вас устроит и договоримся начинать работу, предлагаю выполнять задачи поэтапно с оплатой каждой из них по рабочему времени (по затраченным часам). Можно разбить задачи на отдельные части, если предложенные окажутся слишком крупными.3) Нужно будет создать в игре функционал ботов, со следующими свойствами и особенностями: Должны существовать консольные команды `/addbot <сторона> ` и `/removebot `, добавляющие и удаляющие ботов (в игре есть реализованный механизм консольных команд, добавлять их не сложно)При создании многопользовательской игры можно будет указать:Нужно ли добавлять в игру ботовЕсли да, то:Сколько добавлятьНужно ли уменьшать количество ботов при входе в игру новых людейКаков должен быть уровень ботов (по 5-бальной шкале сложности, например "Новичок", "Опытный", "Ветеран", "Мастер", "Легенда", с возможностью где-то менять эти названия)Во время игры боты должны появляться в соответствии с требуемым количеством, и им должны даваться человеко-подобные имена, случайным образом берущиеся из заготовленного списка. Присоединяться они должны к обоим командам для достижения требуемого количества.Боты должны управляться модулем искусственного интеллекта https://assetstore.unity.com/packages/tools/behavi...У всех ботов должно быть стандартное оружие и броня, никакой кастомизации не требуется.В зависимости от сложности ботов ("Новичок", "Опытный", и т.д.) меняются следующие параметры:Дальность видимости ботовКучность стрельбы (насколько точно бот стреляет в игрока)Дальность видимости при стрельбе - насколько далеко бот может заметить персонажа если тот попал в ботаПоведение ботов должно быть полностью синхронизировано между игроками - то есть все игроки должны видеть в движениях и действиях ботов ровно одно и тоже, в том числе в стрельбе, и в том числе в стрельбе projectile'ами (например, ракетами) Боты должны автоматически "менять владельца" при выходе мастера игры. Бот должен отображаться в таблице очков, где можно увидеть фраги текущей игрыЗа убийство ботов, как и за убийство людей начисляется опытПоведение ботов должно подчиняться следующей логике (она задаётся через модуль искусственного интеллекта):После спавна бот выбирает одно из доступных ему idle-поведений:Патрулировать свою базуИдти патрулировать вражескую базу в поисках приключенийПросто слоняться по району между своей и вражеской базой в поисках приключенийВ случае, если бот заметил врага (он попал в его зону обнаружения), либо враг выстрелил в него и попал (и находится в зоне обнаружения при стрельбе)Бот переходит в режим follow (преследование)В режиме follow бот бежит к герою в течении заданного времени, если за это время не удалось добежать на расстояние стрельбы (заданное в настройках), и не получил новых вводных, например в него ни разу не попали - перестаёт преследовать, переходит в idleЕсли в режиме follow видит другого игрока в зоне обнаружения - может переключиться на него.Если бот на расстоянии стрельбы, но игрока не видит из-за препятствия, выбирает ближайшую удобную точку, с которой есть прямая видимость и идёт к ней.Сблизившись на расстояние стрельбы, переходит в режим fight, перемещается в случайных направлениях, стреляя по пользователю, при этом, это не должна быть дерготня, а небольшие перемещения в случайных направлениях, как у обычного пользователя, пытающегося не попасть под огонь.Если враг ходит пешком - стрелять из автомата калашниковаЕсли враг едет на технике - стрелять из РПГ-7В случае, если враг убит - переходит в режим idleЕсли враг увеличил дистанцию дальше дистанции стрельбы или его не видно - опять в режим followЕсли при создании игры был установлен флаг "балансировать ботов при входе людей" и в игру зашёл-вышел игрок - спустя минуту (настраивается) после входа/выхода нужно удалить/создать бота (минута нужна для того, чтобы нельзя было быстро входя и выходя из игры "пересоздать" всех ботов)Разбивка вышеописанного функционала на задачи: Задача 1: Реализовать саму возможность существования бота и консольные команды /addbot и /removebot. По команде, например `/addbot blue vasya_pupkin` на сторону синих должен добавляться бот с никнеймом vasya_pupkin, он должен появляться в случайном месте на карте (можно задать его конкретными координатами +/- случайные числа, которые позволят создать несколько ботов таким образом)Этот бот должен быть представлен персонажем аналогичным игроку в стандартной броне, с автоматом Калашникова и ракетницей РПГ.Бот должен отображаться в таблице очков где отображаются игроки и фрагиБота должны видеть все игрокиПри выходе игрока, который создал ботов, они должны переходить по наследству другому игрокуПо команде `/removebot vasya_pupkin` бот должен исчезать так как будто его и не былоБота должен иметь возможность удалить с помощью `/removebot` любой пользователь а не только тот, кто его создалБольше ничего, никакой логики не требуется.Сами по себе команды `/addbot` и `/removebot` должны работать только в отладочном режиме (GameConfig::DebugMode)Если удастся заложить в ботов возможность к будущему расширению - чтобы в дальнейших реализациях можно было добавлять в них новые состояния (например, возможность для ботов иметь различное оружие) - это было бы очень здорово. Задача 2: Реализовать систему жизней и стрельбыБот будучи создан с помощью `/addbot` должен сразу начинать стрелять перед собой. Просто делать один выстрел в секунду.Пользователи, попавшие под эту стрельбу должны получать урон.Если пользователь, в которого попал бот, получил достаточно урона чтобы погибнуть, счёт бота в таблице очков должен возрасти на 1.Пользователи, стреляющие по боту, должны наносить ему урон. Причем не только тот, кто этого бота создал, но вообще все пользователи.Если у бота кончаются жизни - он должен умереть, и через некоторое время заспавниться снова, выбрав место для спавна так же как оно выбиралось в задаче 1.Игрок, убивший бота, должен получать опыт, аналогично тому, как он его получает при убийстве другого игрока, кроме того, у него должно увеличиваться количество фрагов.Задача 4: Спавн ботов, подключение модуля искусственного интеллекта для ботов, беготняБоты должны спавниться на точках спавна, на которых спавнятся и игроки, на соответствующих базахБоты уже не должны автоматически стрелять будучи заспавненнымиПодключить модуль https://assetstore.unity.com/packages/tools/behavi... - он куплен, будет предоставлен. Если будут другие предложения - использовать другой модуль или написать логику работы ботов самостоятельно - принимается.С помощью данного модуля заставить ботов патрулировать некоторый участок на карте, просто чтобы они бегали.Бег бота должен быть виден всем игрокам (не только перемещение, но и анимация бега, как он ногами перебирает). Задача 5: Реализовать базовую логику поведения ботов с помощью Invector FSM AI TemplateРеализовать все требуемые состояния с помощью FSM редактора:idle, follow, fightРеализовать логику idleЗадача 6: Реализовать сложную логику поведения ботовРеализовать логику followРеализовать логику fightЗадача 7: Меню запуска игры, настройки ботовДоработать меню создания игры, где добавить галку наличия ботов, поле их количества и выпадающий список с их уровнямиЗадать где-то в редакторе Unity список из 5 уровней сложности, так чтобы его легко было редактироватьСоответственно, каждый уровень сложности должен иметь конфигурируемые: дальность обнаружения, дальность обнаружения при стрельбе, кучность стрельбы.Настройки сложности должны применяться к боту при его спавнеПри запуске игры, если была включена галка "наличия ботов" включается автоматический спавн ботов, с разбивкой по командамПри входе/выходе игроков с паузой в минуту (настраиваемо в некоей переменной в редакторе Unity) боты создаются/удаляются с учётом командного состава (чтобы команды были относительно сбалансированными)По возможности будут помогать разбираться с кодом и логикой, так-как что-то знаю сам.Если решите отозваться на этот заказ, пожалуйста, задайте ваши вопросы к данному ТЗ, это важно для меня чтобы оценить ваш уровень. Кроме того, я задам вам несколько вопросов чтобы понять, знаете ли вы хотя-бы то что уже знаю я, не являясь fulltime C#-разработчиком на Unity и PhotonБюджет не окончательный, размер может быть увеличен по ситуации.Также, если сработаемся, возможно дальнейшее сотрудничество по другим игровым проектам на Unity.
Games