Реализовать ботов в игре-стрелялке на Unity+PUN

50 000 руб. за проект
08 августа 2024, 06:14 • 3 отклика • 41 просмотр
Кратко: Нужно реализовать ботов и интегрировать движок управления ботами 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 <сторона> <nickname>` и `/removebot <nickname>`, добавляющие и удаляющие ботов (в игре есть реализованный механизм консольных команд, добавлять их не сложно)
  • При создании многопользовательской игры можно будет указать:
    • Нужно ли добавлять в игру ботов
      • Если да, то:
        • Сколько добавлять
        • Нужно ли уменьшать количество ботов при входе в игру новых людей
        • Каков должен быть уровень ботов (по 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.

Отзывы
R50 00477a8e5d930de4c9a378f875adee4a
Заказчик
Нужно было написать функционал ботов сетевой многопользовательской стрелялки в режиме team death match.
Игры изначально была написана какими-то сумрачными гениями и приобретена со всеми исходниками.
Далее я пытался ее дорабатывать сам, но в силу нехватки знаний и времени понял что ботов сам не сделаю, и после публикации заказа вышел на Михаила.
Михаил за время работы сделал самих ботов, функционал их ИИ на основе конечных автоматов, логику перемещения по карте, принятия решений о целях, стрельбе. Доделал пользовательский интерфейс для неотличимости ботов от обычных игроков, подключил ботов к имеющейся кривой-косой системе опыта и внутриигровой валюты (чтобы убийство ботов могло приносить опыт) и помог решить кучу проблем в проекте.
Изначально задачи ставил я достаточно подробно, и они выполнялись даже лучше чем я изначально задумывал, а если была проблема в реализации, всегда находился способ ее решения.
Оцениваю Михаила как высококлассного специалиста в геймдеве, самостоятельного, ответственного, опытного. Стоимость работ в 1200 в час оцениваю как вполне адекватную уровню.
3 месяца назад