Как играть в Школе Draw Bricks зомби апокалипсис напал мужик
13 дек 2011 Школа draw bricks зомби апокалипсис напал мужик в 2011 году






13 дек 2011 Школа draw bricks зомби апокалипсис напал мужик в 2011 году






Мы небольшая, команда из двух человек - художника и программиста. В этом году мы начали работать над игрой под названием "Purrtopia" на unity, про уютного виртуального кота, который поселится прямо на вашем рабочем столе.
По концепции, которую мы в начале заложили в проект, это была простая игра с базовыми потребностями, состоящими из еды, ласки и сна, однако постепенно мы "навешивали" интересные фишки для более увлекательного геймплея - у кота есть характер, привычки, предпочтения в еде, предметах, играх, местах отдыха или интереса (все это строится на внутренних параметрах системы).
У кота имеется большая вариативность кастомизации, такие как: изменения цвета, пятен на коте, большой выбор одежды для головных уборов, хвоста, цепочек и очков. Помимо этого можно менять и объекты - лежанки, когтеточки, мячи и многое другое!
Помимо всего прочего мы сделали различные артефакты. Артефакты - это уникальные предметы, которые выпадают из сундука с сокровищами, который кот может найти для вас, если он доволен. Для артефактов есть 4 слота - установленные в них артефакты дают различные улучшения, например, кот реже хочет кушать или быстрее растет один из его параметров.
В Игре также буде онлайн, вы сможете с помощью уникального кода внутри игры присоединиться к другому игроку, и видеть его кота. В дальнейшем будут взаимодействия между вашими питомцами
В скором времени дадим возможность скачать демку, а также добавим новые анимации и попробуем сделать всякие фишки для стримеров. А пока что можете добавить игру в свой список желаемого!
Обновления 1.0.1 и 1.0.2 Голосовой чат и Плавный геймплей!
В Batla Reborn появился Голосовой Чат + Сервер стал работать быстрее!
Патч 1.0.2 — Голосовая связь в игре.
Разговаривать с тимейтами теперь можно прямо во время боя:
• Общий чат (клавиша F): чтобы вас слышали абсолютно все на карте.
• Командный чат (клавиша G): чтобы обсуждать тактику только со своей командой.
• Удобный контроль: в игре видно плашку с ником того, кто сейчас говорит, а шумных игроков можно легко замутить. Громкость голосов настраивается в меню.
Патч 1.0.1 — Убрали лаги и задержки.
Переписали внутреннюю логику сервера, чтобы бои проходили максимально гладко:
• Урон, попадания и взрывы мин теперь просчитываются мгновенно.
• Награды за матч больше не «зависают» и приходят без задержек.
• Таблица счетов в конце раунда обновляется быстрее.
Зайти в игру и протестировать по этим ссылкам:
site: batla-reborn.com
tg: @batlareborn
Последние два года я провел в обнимку с Unity, Blender, FL Studio и Photoshop. Моей целью было создать не просто очередной конвейер скримеров, а вязкий, психологический хоррор, вдохновленный той же атмосферой классики с начала нулевых. Я фанат классических психологических хорроров. Тех самых, где пугает не громкий звук, а само нахождение в «неправильном» месте. Поэтому «Crimson Waters Isle» – это хоррор с упором на атмосферу и чувство изоляции.
Наконец-то я могу это сказать: моя игра вышла — ее уже можно скачать бесплатно.
Изначально игра планировалась в стиле PS1 но с уровнем роста скилла постепенно стала ближе к PS2. Так же было добавлено современное освещение и тени. Еще со времен Silent Hill 2 нравятся стильные тени в хоррор играх.
Почему мне нужна ваша помощь? Сейчас игре очень нужны «свежий взгляд». Разработка в соло – это когда ты сам себе и программист, и художник, и тестер, и звуковик. Поэтому сейчас проект в стадии «отлова багов». Проверка работы камеры, нет ли затыков в коде, и насколько вам страшно.
Я буду благодарен, если вы:
- Скачаете демо и просто попробуете игру «на вкус».
- Напишете честный фидбек в комментариях. Можно лаять код, можно хвалить визуал — я приму все.
- Запишете прохождение (даже если без микрофона) – мне важно видеть, где игроки тупят или где ломается логика.
Это был долгий путь длиной в два года. Спасибо всем, кто поддерживал. Увидимся на острове!
СКАЧАТЬ ДЕМО: https://limoonch.itch.io/crimson-waters-isle
Привет! Я наконец-то готов показать Вам то, над чем работал последние месяцы. Мой хоррор Crimson Waters Isle (да, с названием я окончательно определился!) уже доступен для скачивания на itch.io.
Это был долгий путь, и я очень благодарен всем, кто поддерживал меня советами и добрым словом на протяжении разработки. Сейчас мне критически важно ваше мнение. Буду безумно рад, если вы запишете свое прохождение — мне очень интересно посмотреть, как вы будете реагировать на пугающие моменты.
Если наткнетесь на баги — обязательно дайте знать в комментариях. Давайте вместе сделаем этот «остров» по-настоящему пугающим!
Скачать демо: https://limoonch.itch.io/crimson-waters-isle
Всем привет.
Ищем людей в команду для проекта STOLEN PEACE. Это инди-хоррор от первого лица на Unity.
Сразу уточним: мы делаем полную версию игры, а не демо. У проекта уже есть понятная основа, структура и видение того, как он должен развиваться дальше.
Что уже есть по проекту:
общая концепция игры
структура ключевых сцен
основной сюжетный крючок
понимание атмосферы и направления
список основных механик и систем
Unity Gameplay Programmer
Нужен человек, который поможет собирать геймплейную часть игры: передвижение, взаимодействие, игровые системы, события, прогресс и общую логику.
Technical Designer / Scripter
Нужен человек для настройки триггеров, игровых сцен, темпа прохождения и связи сюжета с действиями игрока.
3D Environment Artist
Нужен человек для создания локаций и окружения. Это сами пространства, наполнение предметами, детали и атмосфера.
Sound Designer / Audio Specialist
Нужен человек на звук: амбиент, напряжённые моменты, звуковые акценты и общую атмосферу проекта.
UI/UX Designer
Нужен человек на интерфейс: подсказки, меню, цели, настройки и удобный UI.
Narrative Designer / Writer
Нужен человек на диалоги, тексты, лор, подачу сюжета, NPC и общий тон игры.
QA / Playtesters
Нужны люди для тестирования. Проверка багов, темпа игры, понятности задач и общего впечатления от прохождения.
это не просто идея, а уже оформленный проект
есть понимание структуры и направления
можно подключиться на раннем этапе
вклад каждого человека будет заметен
есть возможность расти вместе с проектом
Сейчас проект поставлен на паузу из-за нехватки людей в команде. Мы ищем специалистов, чтобы собрать состав и продолжить полноценную разработку.
Если вам интересно участие — пишите:
riventstudio@Mail.ru
Телеграм-канал с поиском сотрудников:
@stolenpeace_job
Гугл форма анкет:
https://forms.gle/q8cwnqJ57GbJgn5D9
P.S. Если вам нравятся мрачные атмосферные игры и вы хотите поучаствовать в разработке полного проекта, будем рады пообщаться.
— [RIVENTstudio]
Анализ первой сессии -- это "момент истины" для твоей игры.
Представь, что игрок только что установил твою игру. У него нет лояльности, нет эмоциональной связи с проектом. Его первая сессия -- это как первое свидание: либо возникает магия, либо вы больше не увидитесь.
Ниже я расскажу, как на основе длительности этого "свидания", можно давать оценку и строить гипотезы. А еще прикреплю SQL запросы и поделюсь аналитикой по своей веб-игре Ферма на острове (https://yandex.ru/games/app/336608).
Короткая сессия (менее 3-5 минут) часто означает, что игрок "уперся в стену" -- не понял механики, запутался в интерфейсе или столкнулся с техническими проблемами
Оптимальная длительность (5-15 минут) говорит о плавном вхождении в игру
Длинная сессия (15+ минут) — игрок "зацепился", он получил достаточно мотивации продолжать
По моим данным (я их округлил для наглядности), игроки с первой сессией:
Менее 2 минут — 80% никогда не возвращаются
5-10 минут — 45% возвращаются на следующий день
15+ минут — 65% играют через 7 дней
Разная длительность сессии по источникам:
Рекламные сети — часто короткие сессии, если реклама не соответствует геймплею
Рекомендации друзей — более длинные сессии, так как есть социальное доверие
Органический поиск — самые вовлеченные пользователи
Данные я собираю в Unity Analytics.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-90
GROUP BY fs.USER_ID, fs.session_id, fs.first_session_start
),
percentiles AS (
SELECT
APPROX_PERCENTILE(duration_seconds, 0.1) as p10_seconds,
APPROX_PERCENTILE(duration_seconds, 0.5) as p50_seconds,
APPROX_PERCENTILE(duration_seconds, 0.9) as p90_seconds,
AVG(duration_seconds) as avg_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE duration_seconds >= 0 -- исключаем отрицательные значения
)
SELECT
ROUND(p10_seconds, 2) as p10_duration_seconds,
ROUND(p50_seconds, 2) as median_duration_seconds,
ROUND(p90_seconds, 2) as p90_duration_seconds,
ROUND(avg_duration_seconds, 2) as average_duration_seconds,
total_sessions
FROM percentiles;
Если аналитика по твоей игре собирается сразу для нескольких платформ, то будет полезно посмотреть на них отдельно.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:platform::STRING as platform
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:platform::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.platform,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-90
AND fs.platform IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.platform, fs.first_session_start
)
SELECT
COALESCE(platform, 'Не указана') as platform,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
GROUP BY platform
ORDER BY total_sessions DESC;
Иногда может быть полезно посмотреть как изменилась длина первой сессии с течением времени.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:platform::STRING as platform,
YEAR(EVENT_TIMESTAMP) as session_year,
WEEK(EVENT_TIMESTAMP) as session_week
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:platform::STRING,
YEAR(EVENT_TIMESTAMP), WEEK(EVENT_TIMESTAMP)
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.platform,
fs.first_session_start,
fs.session_year,
fs.session_week,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-270
AND fs.platform IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.platform, fs.first_session_start,
fs.session_year, fs.session_week
)
SELECT
session_year,
session_week,
CONCAT(session_year, '-W', LPAD(session_week, 2, '0')) as year_week,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE session_year IS NOT NULL
AND session_week IS NOT NULL
GROUP BY session_year, session_week
ORDER BY year_week ASC;
И еще интереснее сравнить длительность первой сессии для каждой версии игры за последнее время.
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:clientVersion::STRING as version
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:clientVersion::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.version,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE e.EVENT_DATE > CURRENT_DATE-360
AND fs.version IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.version, fs.first_session_start
)
SELECT
version,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE version IS NOT NULL
GROUP BY version
ORDER BY version DESC;
На примере веб-игры Ферма на острове (https://yandex.ru/games/app/336608), я собрал следующий запрос (ниже опишу разницу):
WITH first_sessions AS (
SELECT
USER_ID,
EVENT_JSON:sessionID::STRING as session_id,
MIN(EVENT_TIMESTAMP) as first_session_start,
EVENT_JSON:clientVersion::STRING as version
FROM EVENTS
WHERE EVENT_JSON:eventName::STRING = 'newPlayer'
GROUP BY USER_ID, EVENT_JSON:sessionID::STRING, EVENT_JSON:clientVersion::STRING
),
session_durations AS (
SELECT
fs.USER_ID,
fs.session_id,
fs.version,
fs.first_session_start,
MIN(e.EVENT_TIMESTAMP) as session_start,
MAX(e.EVENT_TIMESTAMP) as session_end,
DATEDIFF(second, MIN(e.EVENT_TIMESTAMP), MAX(e.EVENT_TIMESTAMP)) as duration_seconds
FROM first_sessions fs
JOIN EVENTS e ON fs.USER_ID = e.USER_ID
AND fs.session_id = e.EVENT_JSON:sessionID::STRING
WHERE fs.version IS NOT NULL
GROUP BY fs.USER_ID, fs.session_id, fs.version, fs.first_session_start
)
SELECT
version,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.1), 2) as p10_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.5), 2) as median_duration_seconds,
ROUND(APPROX_PERCENTILE(duration_seconds, 0.9), 2) as p90_duration_seconds,
ROUND(AVG(duration_seconds), 2) as average_duration_seconds,
COUNT(*) as total_sessions
FROM session_durations
WHERE version IS NOT NULL
GROUP BY version
HAVING total_sessions > 100
ORDER BY version DESC;
Номер версии генерируется автоматически при сборке -- могу рассказать другим постом, если интересно...
1. Я исключил данные по версиям, в которых было менее 100 первых сессий, чтобы убрать всплески:
2. Выгребаю данные за всё время, чтобы вот вообще всё увидеть :D
Вот, что получилось:
Релиз 1.1.2 от 30 октября 2024 года каким-то образом сломал первое впечатление об игре.
Тогда я об этом узнал не сразу, а только через неделю, потому что только-только настраивал аналитику. Это было мега печально, потому что эти игроки были привлечены рекламой за кровные.
Протестировав игру через инкогнито самостоятельно и привлекая друзей, удалось определить причину отвала: аналитика собиралась некорректно.
В браузерных играх, Unity Analytics складывает идентификатор пользователя в куки, а как только они протухают, то обновляет его. Получалось, что каждый раз, игра идентифицировала игрока по новой и считала, что это его первая сессия.
Решение было простым: генерировать случайный идентификатор и сохранять его в данных игрока, а затем использовать в качестве UnityServices.ExternalUserId.
20 октября была выпущена версия 1.2.0, в которой игра начала идентифицировать игроков корректно:
Это позволило адекватно оценить продолжительность первой игровой сессии и составить ряд гипотез. Первое, что бросилось в глаза после плейтестов: игра дарит игроку снаряжение, но не объясняет, как им пользоваться.
Спустя еще неделю игра начала обучать игрока экипировать и прокачивать снаряжение, и вот результат:
Это дало прирост в две минуты или ~28%!
После нескольких релизов летом, начиная с реализации защиты от накруток при переводе времени на устройстве, медиана начала падать:
Возможно, механики просто наскучили и игроки хотят чего-то нового.
Гипотезы закончились, проект наскучил и я переключился на новый.
Надеюсь, что мне удалось рассказать что-то интересное и поделиться опытом аналитики.
Спасибо за внимание! Жду вопросы в комментариях.
Привет! Я не большой специалист по программированию, но я пытаюсь создать игру в unity.Я создаю код с помощью руководств и обнаружил проблему: у меня не работает слайдинг.(
Я не знаю причины, но в коде нет "красных" ошибок, но вот код:
Вот настройки персонажа:
Если кто сможет помочь, буду крайне благодарен!
Спасибо!
