Реализовать ботов в игре-стрелялке на Unity+PUN
50 000 руб. за проект
Кратко: Нужно реализовать ботов и интегрировать движок управления ботами 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) Нужно будет создать в игре функционал ботов, со следующими свойствами и особенностями:
Разбивка вышеописанного функционала на задачи:
По возможности будут помогать разбираться с кодом и логикой, так-как что-то знаю сам.
Если решите отозваться на этот заказ, пожалуйста, задайте ваши вопросы к данному ТЗ, это важно для меня чтобы оценить ваш уровень. Кроме того, я задам вам несколько вопросов чтобы понять, знаете ли вы хотя-бы то что уже знаю я, не являясь fulltime C#-разработчиком на Unity и Photon
Бюджет не окончательный, размер может быть увеличен по ситуации.
Также, если сработаемся, возможно дальнейшее сотрудничество по другим игровым проектам на Unity.
Бюджет не окончательный, может быть увеличен.
Подробно:
Есть уже реализованная многопользовательская игра стрелялка, по сути 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
- После спавна бот выбирает одно из доступных ему idle-поведений:
- Если при создании игры был установлен флаг "балансировать ботов при входе людей" и в игру зашёл-вышел игрок - спустя минуту (настраивается) после входа/выхода нужно удалить/создать бота (минута нужна для того, чтобы нельзя было быстро входя и выходя из игры "пересоздать" всех ботов)
Разбивка вышеописанного функционала на задачи:
- Задача 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
- Реализовать все требуемые состояния с помощью FSM редактора:
- Задача 6: Реализовать сложную логику поведения ботов
- Реализовать логику follow
- Реализовать логику fight
- Задача 7: Меню запуска игры, настройки ботов
- Доработать меню создания игры, где добавить галку наличия ботов, поле их количества и выпадающий список с их уровнями
- Задать где-то в редакторе Unity список из 5 уровней сложности, так чтобы его легко было редактировать
- Соответственно, каждый уровень сложности должен иметь конфигурируемые: дальность обнаружения, дальность обнаружения при стрельбе, кучность стрельбы.
- Настройки сложности должны применяться к боту при его спавне
- При запуске игры, если была включена галка "наличия ботов" включается автоматический спавн ботов, с разбивкой по командам
- При входе/выходе игроков с паузой в минуту (настраиваемо в некоей переменной в редакторе Unity) боты создаются/удаляются с учётом командного состава (чтобы команды были относительно сбалансированными)
По возможности будут помогать разбираться с кодом и логикой, так-как что-то знаю сам.
Если решите отозваться на этот заказ, пожалуйста, задайте ваши вопросы к данному ТЗ, это важно для меня чтобы оценить ваш уровень. Кроме того, я задам вам несколько вопросов чтобы понять, знаете ли вы хотя-бы то что уже знаю я, не являясь fulltime C#-разработчиком на Unity и Photon
Бюджет не окончательный, размер может быть увеличен по ситуации.
Также, если сработаемся, возможно дальнейшее сотрудничество по другим игровым проектам на Unity.
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.
Игры изначально была написана какими-то сумрачными гениями и приобретена со всеми исходниками.
Далее я пытался ее дорабатывать сам, но в силу нехватки знаний и времени понял что ботов сам не сделаю, и после публикации заказа вышел на Михаила.
Михаил за время работы сделал самих ботов, функционал их ИИ на основе конечных автоматов, логику перемещения по карте, принятия решений о целях, стрельбе. Доделал пользовательский интерфейс для неотличимости ботов от обычных игроков, подключил ботов к имеющейся кривой-косой системе опыта и внутриигровой валюты (чтобы убийство ботов могло приносить опыт) и помог решить кучу проблем в проекте.
Изначально задачи ставил я достаточно подробно, и они выполнялись даже лучше чем я изначально задумывал, а если была проблема в реализации, всегда находился способ ее решения.
Оцениваю Михаила как высококлассного специалиста в геймдеве, самостоятельного, ответственного, опытного. Стоимость работ в 1200 в час оцениваю как вполне адекватную уровню.