Разработка системы ежедневных заданий для мобильной игры

Игроки устают от однотипных ежедневных заданий и уходят, снижая retention. Мы разрабатываем динамические системы daily quests, которые адаптируются под прогресс и активность каждого пользователя. Наша команда реализует проект под ключ — от генерации квестов до streak-механик, обеспечивая стабильную работу и последующую поддержку.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка системы ежедневных заданий для мобильной игры
Средний
~2-3 дня
Часто задаваемые вопросы

Ваш игрок заходит третью неделю подряд, но ежедневные задания всё те же: «Собери 3 монеты». Ему скучно, он уходит. Retention падает. Мы, как разработчики с опытом в мобильной геймификации, знаем, как превратить daily quests в мощный инструмент удержания. Правильно реализованная динамическая система увеличивает Day-7 retention в полтора-два раза для casual-игр с DAU до 100 000. Экономия на разработке с нуля достигает 40% за счёт готовых шаблонов и продуманной архитектуры.

Как генерировать задания: статические vs динамические?

Статические задания — фиксированный пул, из которого случайно выбираются 3-5 на день. Просто в реализации, предсказуемо для игрока, но быстро приедается. Динамические задания — генерируются на основе прогресса игрока и активности. Новичку дают «пройди 3 уровня», ветерану — «собери 500 ресурсов типа X». Сложнее в реализации, но даёт лучший retention.

Характеристика Статические Динамические
Сложность реализации Низкая Средняя/Высокая
Retention Ниже Выше
Предсказуемость Полная Частичная
Удовлетворение игрока Падает со временем Растет с прогрессом

Почему streak так важен для retention?

Streak (серия дней подряд) создаёт долгосрочную цель поверх ежедневных задач. Игрок возвращается, чтобы не потерять прогресс. Мы реализуем подсчёт дней и выдачу бонусов с нарастающей ценностью: на 7-й день — редкий предмет, на 30-й — легендарный. Это увеличивает Day-30 retention в 3 раза по нашим данным.

// При завершении всех заданий дня
void OnAllQuestsCompleted()
{
    var streak = PlayerPrefs.GetInt("daily_quest_streak", 0);
    var lastCompletedDate = PlayerPrefs.GetString("quest_last_completed", "");
    var yesterday = DateTime.UtcNow.Date.AddDays(-1).ToString("yyyy-MM-dd");
    var today = DateTime.UtcNow.Date.ToString("yyyy-MM-dd");
    streak = (lastCompletedDate == yesterday) ? streak + 1 : 1;
    PlayerPrefs.SetInt("daily_quest_streak", streak);
    PlayerPrefs.SetString("quest_last_completed", today);
    var reward = CalculateStreakReward(streak);
    InventoryManager.Instance.AddReward(reward);
    GameAnalytics.NewDesignEvent("DailyQuests:StreakCompleted", streak);
}

Схема данных: шаблоны и активные задания

Для динамической системы удобно хранить шаблоны и активные задания в отдельных классах:

[Serializable]
public class QuestTemplate
{
    public string templateId;
    public string type; // "complete_levels", "collect_items", "defeat_enemies"
    public int[] targetValues; // варианты сложности: [3, 5, 10]
    public string[] targetParams; // для collect: ["wood", "stone", "gold"]
    public QuestRewardTier[] rewardTiers; // награда по сложности
    public int minPlayerLevel;
    public int maxPlayerLevel; // -1 = без ограничения
}

[Serializable]
public class ActiveQuest
{
    public string questId;
    public string templateId;
    public string type;
    public string targetParam;
    public int targetValue;
    public int currentValue;
    public bool isCompleted;
    public bool rewardClaimed;
    public DateTime expiresAt;
}

DailyQuestManager: генерация и трекинг

Реализуем менеджер, который каждый день генерирует новый набор заданий и отслеживает прогресс:

public class DailyQuestManager : MonoBehaviour
{
    private const int QUEST_SLOTS = 3;
    private List<ActiveQuest> _activeQuests = new();
    private QuestDatabase _database;

    public void GenerateDailyQuests()
    {
        _activeQuests.Clear();
        var playerLevel = PlayerData.Level;
        var random = new System.Random(GetDailySeed()); // seed = дата, одинаковы для всех
        var eligibleTemplates = _database.Templates
            .Where(t => playerLevel >= t.minPlayerLevel && (t.maxPlayerLevel == -1 || playerLevel <= t.maxPlayerLevel))
            .ToList();
        var selectedTemplates = eligibleTemplates
            .OrderBy(_ => random.Next())
            .Take(QUEST_SLOTS)
            .ToList();
        foreach (var template in selectedTemplates)
        {
            var difficulty = SelectDifficulty(template, playerLevel);
            _activeQuests.Add(CreateQuestFromTemplate(template, difficulty));
        }
        SaveQuests();
    }

    private int GetDailySeed()
    {
        return DateTime.UtcNow.Date.GetHashCode() ^ PlayerData.UserId.GetHashCode();
    }

    public void TrackProgress(string questType, string param, int amount)
    {
        foreach (var quest in _activeQuests.Where(q => !q.isCompleted && q.type == questType))
        {
            if (!string.IsNullOrEmpty(quest.targetParam) && quest.targetParam != param)
                continue;
            quest.currentValue += amount;
            if (quest.currentValue >= quest.targetValue)
            {
                quest.isCompleted = true;
                OnQuestCompleted(quest);
            }
        }
        SaveQuests();
    }
}

Для выбора сложности используется алгоритм, подбирающий targetValue из массива в шаблоне в зависимости от уровня игрока. Например, для новичка (уровень 1-5) берется минимальное значение, для среднего (6-15) — среднее, для высокого (16+) — максимальное.

Что даёт серверная генерация заданий?

Серверная генерация обязательна, если задания связаны с реальными наградами (IAP-эквивалент). Клиент запрашивает задания, сервер (например, PlayFab Cloud Script) возвращает сгенерированный список и верифицирует прогресс перед выдачей награды. Это защищает экономику от взлома. Для простых игр без ценных наград клиентская генерация проще и быстрее.

Как адаптировать сложность под игрока?

Одна из частых ошибок — давать ветерану те же задания, что и новичку. Мы используем систему профилей сложности: на основе уровня, времени в игре и последних действий выбирается подходящий шаблон. Например:

  • Новичок (1-5 level): complete_levels с target=3, награда — монеты.
  • Средний (6-15): collect_items с target=100, награда — редкий ресурс.
  • Ветеран (16+): defeat_enemy с параметром elite, target=10, награда — уникальный предмет.

Это поддерживает интерес и не даёт заданиям стать рутиной.

Интеграция в геймплей: бесшовный трекинг

Трекинг заданий должен быть автоматическим — игрок не думает «надо нажать кнопку учёта», он просто играет:

// В системе боёвки:
void OnEnemyDefeated(Enemy enemy)
{
    DailyQuestManager.Instance.TrackProgress("defeat_enemies", enemy.type, 1);
    AchievementsManager.Instance.TrackEvent("enemy_defeated", 1);
    // ...
}

// В системе сбора ресурсов:
void OnResourceCollected(string resourceId, int amount)
{
    DailyQuestManager.Instance.TrackProgress("collect_items", resourceId, amount);
    // ...
}

Один вызов из геймплейной системы — все задания с нужным типом обновляются автоматически.

Что входит в работу

  • Проектирование системы заданий (типы, сложность, награды)
  • Реализация DailyQuestManager с трекингом и streak
  • Интеграция с геймплеем и UI
  • Серверная генерация (по необходимости)
  • Документация по использованию и кастомизации
  • Передача исходного кода и доступ к репозиторию
  • Поддержка на этапе запуска

Пошаговая реализация под ключ

Этап Что делаем Срок
Анализ Определяем типы заданий, сложность, награды. Опираемся на документацию Unity 1-2 дня
Проектирование Создаем шаблоны и систему сложности 1 день
Разработка Пишем DailyQuestManager, трекинг, UI 2-4 дня
Интеграция Подключаем к геймплею, настраиваем streak 1-2 дня
Тестирование Проверяем сброс, награды, баланс 1-2 дня
Запуск Публикуем в магазины 1 день

Ориентировочный срок выполнения клиентской системы с базовым набором заданий — 4–7 дней. Полная система с серверной генерацией, streak и сложным UI — 2–3 недели. Стоимость рассчитывается индивидуально после оценки проекта. Если хотите обсудить вашу систему daily quests — свяжитесь с нами, получите консультацию. Закажите разработку — и ваши игроки будут возвращаться каждый день.

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714