Сообщество - Лига Разработчиков Видеоигр
Добавить пост

Лига Разработчиков Видеоигр

6 753 поста 22 206 подписчиков

Популярные теги в сообществе:

Unity UDP P2P (напрямую и через собственный релэй)

И так, вам захотелось добавить сетевуху в вашу игру, и вы не хотите фотон (например потому что нас сейчас отключают везде где могут :) )


Когда-то я сделал ставку на оклусовскую сетевуху для нашей игры, и на сегодняшний день это вылилось в переписывание половины игры (и ф*йс*ук забанен, и сетевуху свою они сворачивают), но так же наша команда написала свой собственный релэй-сервер на C# (http://gitlab.sa-wd.ru/DarkanSoince/networking/-/tree/v3).


Как писать.


Шишек набито достаточно, так что вот вам описание на пальцах как делать сетевуху:

1) Пакет из байтов для отправки делаем под 500-1200 байт (есть мнение про 500, я использую 1000)

2) В пакет влазит еще? - суем, а не отправляем отдельным пакетом
3) Не влазит? отправляем и забиваем новый пакет вне таймера
4) Отправляем по таймерам, а не по кадрам (хотя тут как хотите)

5) Поскольку все пакеты одинаковые, не пересоздаем пакет, а заменяем в нём данные перед отправкой

6) Reliable пакеты отправляем только когда надо знать что пакет дошел (например, отправить старт игры - релиэйбл, движение - не релиэйбл)

7) Если вам надо менять состояние чего-либо, что меняется часто (например владелец предмета), посылаем это состояние в каждом пакете, а не отдельной командой для смен состояния (например вместе с движением).


Простой путь - смотрите тут примеры - http://gitlab.sa-wd.ru/DarkanSoince/networking/-/tree/v3/Program

Смените IP на 127.0.0.1 тут - http://gitlab.sa-wd.ru/DarkanSoince/networking/-/blob/v3/Networking/ClientProgram.cs

Запускать сначала мастер, потом два клиента.

cd .\Program\Master\
dotnet run --framework net6.0
cd .\Program\Client\
dotnet run --framework net6.0

Сервер запустит и после отключения клиентов убьет мастер.


Сложный путь. Штош, перейдем к коду.


Мы используем гугл-протобаф для сериализации/десериализации и первым делом вам надо будет взять и понаписать файлов в /Proto/Event (смотрим код репы, читаем тут https://developers.google.com/protocol-buffers/docs/proto3#scalar) про каждый тип пакета, который вы вообще умеете отправлять.


Допустим что мы хотим что бы персонаж ходил

ProtoTransform.proto (пример названия файла в /Proto/Event)
syntax = "proto3";
package protos;
message ProtoTransform {
int32 netId = 1;  // что двигаем
float positionX = 2; 
float positionY = 3; 
float positionZ = 4;
float rotationX = 5; 
float rotationY = 6; 
float rotationZ = 7; 
float rotationW = 8; 
int32 sequence = 9; // счетчик, который всегда идет вверх
float velocityX = 10; 
float velocityY = 11; 
float velocityZ = 12; 
int32 playerId = 14; 
float angularVelocityX = 15; 
float angularVelocityY = 16; 
float angularVelocityZ = 17;
}

Зачем sequence - что бы два раза не делать одно и то же если пакет пришел позже следующего (а он может и прийти не по порядку и не прийти вовсе, просто при отправке его плюсуем)


Тыкаем build proto.bat, всё, магия готова и наш протофайл сбилжен :)


Тыкаем unity package.bat и у нас в папке /UnityPackage появится билд сетевухи


Запускаем юнити

Window -> package manager -> + -> add package from disk -> папка /UnityPackage/package.json


// Это будет наш нетворкинг. Да, весь в одном файле :)
using SAWD.Networking;
public class SAWDNet : MonoBehaviour {
public enum MessageType {
Transform = 100, // это что бы не перебивать значения из скомпилленого файла
LuboeDrudoe = 101
}
Protos.ProtoTransform protoSendTransform = new Protos.ProtoTransform();
private void Start() {
clientProgram = new ClientProgram();
clientProgram.Start();
clientProgram.Enqueue_ToMaster("default"); // http://gitlab.sa-wd.ru/DarkanSoince/networking/-/blob/v3/Program/Master/.env (этот дэфаулт - QUEUE_default= отсюда, а не из Name, обязательно законфигить под себя!)
// входящий пакет с трансформом
Net.On((int) MessageType.Transform, (point, data) => { // входящий трансформ
var protoOnReceiveTransform = ProtoTransform.Parser.ParseFrom(data.Data);
// protoOnReceiveTransform вот ваш пакет данных, делайте что хотите с ним
});
// я подключился к серверу
Net.On((int) Net.MessageType.Server_Connected, ((point, data) => {
Debug.Log("-Server_Connected- SAWDNet.localPlayerId:" + SAWDNet.localPlayerId);
var connected = Proto.Event.Connected.Parser.ParseFrom(data.Data);
Debug.Log("-Server_Connected- connected:" + connected);
foreach (var userId in connected.Ids) {
Debug.Log("-Server_Connected- userId:" + userId);
//RemoteUser.CreateUser(userId);
// создайте тут юзера (аватар и тд с ид userId). Тут могут быть дубли, создавайте один раз на юзера!
}
}));
// кто-то подключился к серверу после меня
Net.On((int) Net.MessageType.Server_AnotherUserConnected, ((point, data) => {
var connected = Proto.Event.Connected.Parser.ParseFrom(data.Data);
//RemoteUser.CreateUser(connected.Id);
Debug.Log("-Server_AnotherUserConnected- connected:" + connected);

SendTransform(); // один раз отправим трансформ новому подключившемуся

}));

}


private void Update()

{
Net.Update();
if (!Debug.isDebugBuild) return;
while (Net.Logs.TryDequeue(out var log)) {
Debug.Log(log); // у сетевухи разные треды, читаем лог в главном треде
}
}


private void SendTransform(){
// отправка один раз для примера
protoSendTransform.PositionX = lastLocalPosition.x;
protoSendTransform.PositionY = lastLocalPosition.y;
protoSendTransform.PositionZ = lastLocalPosition.z;
Net.Broadcast(GroupType.Client | GroupType.Server, (int) SAWDNet.MessageType.Transform, protoSendTransform , true); // тру значит релиэйбл, будет долбить пока не передаст, ВАМ тут тру не надо, вам надо фолс :)
}


Запускаем сервер


cd .\Program\Master\
dotnet run --framework net6.0

(проверяем что IP мастер сервера в клиенте указан верно, иначе ничего не подключится! http://gitlab.sa-wd.ru/DarkanSoince/networking/-/blob/v3/Networking/ClientProgram.cs)


Запускаем пару клиентов. После коннекта они отправят и получат protoSendTransform или через сервер или напрямую, если они смогут подключиться.


Может быть когда-нибудь я осилю написать нормальную документацию.

Показать полностью

Nightmare Creatures - фанатский ремейк

Nightmare of Nady - это некий фанатский "ремейк" игры Nightmare Creatures. На данный момент я помогаю своему японскому другу в разработке игры.

Для того, чтобы иметь возможность опубликовать игру в Steam и не нарушать авторские права, было решено назвать игру "Nightmare of Nady".

Nightmare Creatures - фанатский ремейк Видеоигра, Инди, Ужасы, Инди-хоррор, Шутер, Разработка, Steam, Игры, Трейлер, Скриншот, Видео, YouTube, Длиннопост, Resident Evil, Resident Evil 4 Remake, Dark Souls

Сюжет повествует об охоте бдительной истребительницы существ Нади за головой некоего зловещего члена семьи Калисто, членами которой являются ученые-мистики. Семья Калисто в попытке создать зелье бессмертия наводнила Лондон ходячими мертвецами и прочими монстрами. Атмосфера и музыка прекрасно передают мрачный дух британской столицы ХХ века.

Nightmare Creatures - фанатский ремейк Видеоигра, Инди, Ужасы, Инди-хоррор, Шутер, Разработка, Steam, Игры, Трейлер, Скриншот, Видео, YouTube, Длиннопост, Resident Evil, Resident Evil 4 Remake, Dark Souls

В игре есть полная поддержка контроллера. Много времени уходит на боевую систему и умный ИИ, который умеет уворачиваться, блокировать удары и т. д. На этом этапе очень важны качественные анимации.

Nightmare Creatures - фанатский ремейк Видеоигра, Инди, Ужасы, Инди-хоррор, Шутер, Разработка, Steam, Игры, Трейлер, Скриншот, Видео, YouTube, Длиннопост, Resident Evil, Resident Evil 4 Remake, Dark Souls

Мы заряжены на 100% и не остановимся на полпути, у моего японского друга Nanomi Kishura большой опыт в разработке игр, он проработал в крупной ААА компании более 5 лет, так что у нас все получится.

На данный момент в игре есть ранняя версия 0.1. Поэтому то, что вы видите в тизере, будет и дальше улучшаться, обязательно подписывайтесь, чтобы следить за развитием игры.

Я буду постоянно обновлять страницу игры. Например, скоро покажу видео боя, реализация боевки очень крутая. В игре также присутствует инвентарь и различные комбо удары. Игра переработана на более современный лад, поэтому проблемы игры Nightmare Creatures вас не коснутся, и вы сможете полностью погрузиться в атмосферу и насладиться игровым процессом.

Nightmare Creatures - фанатский ремейк Видеоигра, Инди, Ужасы, Инди-хоррор, Шутер, Разработка, Steam, Игры, Трейлер, Скриншот, Видео, YouTube, Длиннопост, Resident Evil, Resident Evil 4 Remake, Dark Souls

Хотя игра является неким ремейком Nightmare Creatures, полного копирования игры не будет (чтобы не было нарушения авторских прав). Основной акцент больше ориентирован на жанр Survival horror, в сторону таких игр, как Resident Evil и Silent Hill. Это новый опыт, который взбодрит жанр выживания.

Так-же в игру добавлена система прокачки, получая заданную сумму (ресурсные очки) вы сможете улучшать свое оружие и изучать новые комбо. Эта система позволит вам разнообразить игровой процесс, и не заставит вас все время от начала и до конца использовать одни и те же комбо, которые надоедают после часа геймплея. Таким образом будет минимум 10 комбо для ближнего и огнестрельного оружия.

Что касается системы наведения на противника, то ее можно включать и выключать с помощью геймпада по своему усмотрению, отключение наведения больше подходит для хардкорных игроков старой школы.

Nightmare Creatures - фанатский ремейк Видеоигра, Инди, Ужасы, Инди-хоррор, Шутер, Разработка, Steam, Игры, Трейлер, Скриншот, Видео, YouTube, Длиннопост, Resident Evil, Resident Evil 4 Remake, Dark Souls

В скором времени можно будет пощупать билд игры в демо-версии, которую я добавлю сюда.

Мы постараемся порадовать любителей 90-х отличным продуктом. От вас многого не потребуется. Чтобы нас поддержать, добавьте игру в свой список желаний, поставьте лайк и следите за разработкой. Ссылка на игру

Показать полностью 5

Недельный геймдев: #98 — 4 декабря, 2022

Из новостей: исходники движка Приключений капитана Блада выложили в открытый доступ под GPL-3, Epic выпустили новую версию MetaHuman.


Из интересностей: Тодд Говард в подкасте Лекса Фридмана, чему можно научиться у 1600 инди-разработчиков в Steam, которые заработали больше $100К, как использовать нейросеть для категоризации трёхмерных тел.

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Обновления/релизы/новости


Исходники движка Приключений капитана Блада выложили в открытый доступ под GPL-3

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Скачать можно с Гитхаба.


Тем забавнее теперь перечитывать старые новости о том, что «какой-то сисадмин тупо потёр все винты с исходниками».

RealityScan теперь можно бесплатно загрузить на iOS

RealityScan — приложение от Epic Games для 3D-сканирования для мобильных устройств, которое превращает фотографии в высококачественные 3D-модели.


Попробуйте новый фреймворк для симуляций на нодах Blender
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Фреймворк расширяет существующую систему Geometry Nodes для поддержки моделирования на основе частицу. Потыкать можно в экспериментальной сборке.


Управление выпусками Godot 4.0+
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

В посте команда пролила свет на ожидания от версии 4.0 и будущего Godot 4.x.


Последние новости о Cinematic Studio и Live Capture
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

В прошлом году Unity выпустила набор инструментов для виртуального производства и кинематографии, а затем запустила программу закрытого бета-тестирования для сбора информации о том, что нужно создателям.


Теперь серия Unity 2022 даёт возможность обновить многие из этих возможностей.


Халява/раздачи/бандлы/курсы


Онлайн-курс: лицевая анимация MetaHuman с Faceware Analyzer и Retargeter

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Вторая волна бесплатной серии курсов Unreal Online Learning, созданных в сотрудничестве с Faceware. Faceware для захвата движений лица помогает аниматорам точно фиксировать движения лица и быстро и надёжно создавать правдоподобную лицевую анимацию.


Интересные статьи/видео


Тодд Говард в подкасте Лекса Фридмана

Геймдизайнер немного жалеет о том, что не начал разрабатывать шестую часть раньше.


Чему можно научиться у 1600 инди-разработчиков в Steam, которые заработали больше $100К
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Только 10% разработчиков в Steam заработали больше $100 000 валового дохода. Автор оригинала попробовал по открытым данным сравнить, что делали успешные разработчики, чего не делали все остальные.


Как начинающему художнику выбрать направление в геймдеве: объясняют авторы Warface, The Tales of Bayun и Trains
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Эссе CG-художников из индустрии о выборе пути, личных вкусах и специализации.


Дуновение с запада: симуляция ветра в Ghost of Tsushima

В докладе с GDC 2021 Билл Рокенбек из Sucker Punch Productions даёт множество советов и показывает приёмы, которые помогли сделать симуляции быстрыми и правдоподобными при максимальном использовании графического процессора Playstation.


Разбор фрейма Death Stranding

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Момо очередную крутую статью написал. В этот раз разобрал по фреймам последний проект Кодзимы.


Как использовать нейросеть для категоризации трёхмерных тел
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

В статье рассказ о том, как сотрудник МойОфис задействовал машинное обучение для распознавания и классификации трёхмерных тел. При этом весь информационный контекст был ограничен геометрией этих тел, то есть исключительно набором вершин и полигонов.


Проверяем Архитектурные стили на движке Factorio (часть 2, SOA)
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Статья не связана напрямую с геймдевом, но всё равно хочу поделиться.


Автор пробует разные архитектурные стили и в новой статье пытается реализовать логику не монолита, а сервис-ориентированную архитектуру (Service-Oriented Architecture или SOA) на движке игры Factorio. Ещё и замеры сделал с прошлым вариантом.


Как создать игровые ассеты, вдохновлённые Red Alert, с помощью Stable Diffusion
Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Инструменты для ассетов, созданных с помощью АИ, постоянно развиваются. Соучредитель Scenario Эммануэль де Местр показал, чего разработчики игр могут достичь, настроив Stable Diffusion.


Как анимации The Callisto Protocol воплотились в жизнь с помощью захвата движения

Глен Скофилд и его команда рассказывают про то, как они создавали анимации персонажей для их ожидаемого хоррора.


Трюки со скриптами в редакторе Unity, которые сэкономят вам кучу времени и нервов. Часть 1

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Перевод статьи из блога Unity, направленной на улучшение рабочего процесса в редакторе.


Исследуем Disco Elysium

В видео автор подробно разбирает визуальную составляющую игры.


Почему Marvel Snap стала хитом и как долго им останется?

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Deconstructor of fun подробно разбираются в успехе игры.


Дизайн уровней в Neon White от Annapurna

Недельный геймдев: #98 — 4 декабря, 2022 Gamedev, Дайджест, Новости, Разработка, Unity, Видео, YouTube, Гифка, Без звука, Длиннопост

Разработчики Neon White обсудили испытания при создании игрового уровня Smackdown.


Разное


Симуляция роя жуков в Blender 3.5

Найдено в Твиттере.


Симуляция жидкости в реальном времени в Unreal Engine 5

С помощью FluidNinja.

Если хотите поддержать выход дайджеста и других материалов, сделать это можно одним из способов.

- На Патреоне

- На Boosty

- Через Paypal

- Через Яндекс.Деньги

Показать полностью 15 7

[17] Zombie Shooter на Unreal Engine 5. Health Component. Part 2

В данном видео продолжим работу над Health Component, добавим возможность "хила".

GitHub - https://github.com/SalamandrSpb/ZombieShooter

Мой собственный клон популярной игры #8

Все привет.
Я продолжаю делиться успехами своего самообразовательного процесса по разработке клона игры MagicSurvival.
Теперь у игры появилось настоящее рабочее название: Portal leap survival

В пршлом посте мне сделали ряд замечаний о интерфейсе моей игры. Некрасиво, непонятно, не видно... я постарался внести правки в соответствии с замечаниями.

Я сделал более схематичные иконки, что бы они не сильно выбивались по стилю из LowPoly игры. Добавил купленные рамки. Блок статистики по текущим параметрам навыка вынес на выезжающее меню. Если игрок встанет перед диллемой какое улучшение ему стоит взять, то сможет нажать на кнопку информации и увидеть текущие параметры спела.

Однако пока так и не придумал что мне сделать с описанием улучшений спосбностей. Возможно, что всё же оставлю в текущем виде, но удобство навернео ещё нужно протестить.

Мой собственный клон популярной игры #8 Инди игра, Gamedev, Разработка, Unreal Engine 4, Midjourney, Длиннопост
Мой собственный клон популярной игры #8 Инди игра, Gamedev, Разработка, Unreal Engine 4, Midjourney, Длиннопост
Мой собственный клон популярной игры #8 Инди игра, Gamedev, Разработка, Unreal Engine 4, Midjourney, Длиннопост

Визуализацию отката навыка рывок, я перенёс с отдельной иконки возле линии опыта и поместил над хипами игрока, что бы отрывать глаз от центра экрана было не обязательно, что бы понять сколько времени осталось до следующего применения этой способности.

Мой собственный клон популярной игры #8 Инди игра, Gamedev, Разработка, Unreal Engine 4, Midjourney, Длиннопост

Так же в очередной раз пере балансировал карты. Теперь все типы противников будут появляться начиная с первой же локации. Ранее я вводил их по одному с каждым новым порталом, но проходить по 10-15 минут порталы, которые только и делают что добавляют новый тип противников, не привнося ничего нового в геймплей, мне показалось слишком скучно, и я решил сконцентрироваться больше на опциональных правилах для каждой арены.

На текущий момент есть несколько видов арен.
- Базовая карта
- Базовая карта с добавлением леса (препятствия заставляют двигаться иначе)
- Тёмный уровень, где освещена только небольшая зона перед взглядом игрока
- Тёмный уровень, где по карте разбросаны безопасные зоны которые освещены, и за пределами которых игрок получает периодический урон.
- Тёмный уровень где есть только одна освещённая зона и она находится в постоянном движении, миссия на сопровождения своего рода;
- Карты с ледяным покровом, где большая часть арены покрыта льдом перемещение по которому осложнено проскальзыванием;
- Карта болото, где большая часть арены это область в которой игрок получает периодический урон и двигается медленнее;
- Арена лабиринт с большим количеством препятствий уменьшающая эффективность направленных способностей.

Конечно от уровня к уровню постепенно появляются более толстые враги, а специальные монстры получают усиленные вариации.

К сожалению, оценить весёлость игры пока трудно, необходимо провести очередной раунд тестирования, а ещё впереди добавление разнообразных моделек противников. Всё же стандартный моб с шаром вместо головы, это конечно... скучно.

Что бы рост силы игрока был более заметным решил, добавить цифры вылетающего урона при поражении противников. Но опять же после нескольких часов тестов оно уже перестало бросаться в глаза и не понятно насколько информативно. Придётся мучить друзей что бы они попробовали сыграть и дали внеочередную оценку проекту.


Решил обернуться назад и оценить, насколько изменился геймплей за те 200 часов что я потратил на работу и запилил по этому поводу "тикток". Не знаю как интегрировать его в пост, по этому просто оставлю ссылку:

https://vk.com/clip-213932674_456239030

Проект делается под PC на UE4 без использования С++, только на Blueprints.
Группа в ВК: https://vk.com/public213932674

Показать полностью 4

Как я пазлы делать учился

Как я пазлы делать учился Разработка, Мобильные игры, Инди, Инди игра, Gamedev, Пазл, Головоломка, Логические игры, Длиннопост

Когда я приступал к сборке пазлов, у меня не было ни малейшего представления о том, как и почему они должны работать. Но собрав больше сотни уровней, я начал понимать определенные паттерны и вывел для себя некоторые правила в построении загадок. Я не претендую на истину в последней инстанции, но лично мне они помогли с самым сложным, а именно: какой должен быть уровень на конкретном месте, как он должен работать и почему.

Начну с того, что в рамках этого текста я предлагаю понимать под головоломкой «пазл». Это в первую очередь игровая сцена, которая ставит перед игроком ряд задач, с объектами на ней, с частью из которых игрок может взаимодействовать. Как правило, любой пазл можно декомпозировать до нескольких «ходов», звеньев в цепи решения. В зависимости от сложности уникальности и количества таких ходов на одной сцене, которые нужно подобрать, будет и увеличиваться сложность самого пазла. Но об этом позже.


В самом начале идет обучение какой-то механике. Любая игра сначала учит нас чему-то, а потом экзаменует на умение обращаться с полученным знанием. Моя задача заключалась в том, чтобы игрок не мог пройти уровень, не освоив представленную на нем механику. Например, на первом уровне игроку доступна только механика поворота. Это первая механика, с которой он сталкивается. Как нам быть уверенными в том, что он ее усвоил? Очевидно, решение уровня должно засчитываться только после того, как игрок верно применит механику, а именно повернет зеркало. На этом этапе точность его движений для нас не слишком важна, главное, что он попал в цель. Пройти уровень, не повернув зеркало, нельзя, игрок вынужден его повернуть и тем самым, освоив механику, научиться ей пользоваться. Но это не значит, что он ее понял, осознал все тонкости ее работы. То, что игрок освоил что-то, означает лишь то, что он может этим пользоваться, не вдаваясь в детали самого процесса. Чтобы водить машину, необязательно досконально знать, как устроена ручная коробка передач. Чтобы пользоваться компьютером, не обязательно задумываться о том, как настроены вторичные тайминги оперативной памяти и т.д.


В дальнейшем, чтобы игрок закрепил механику, мы повторяем ситуацию, которую он уже решил, усложняя ее, но так, чтобы игрок понимал, что в цепочке действий, которые ему предстоят, добавился еще один элемент или шаг. Конечная цель должна быть прозрачной для игрока. Добавив на следующем уровне стену, мы добавляем к привычной схеме еще одно звено. Игрок уже не может кратчайшим путем, освоенной механикой поворота достигнуть цели. Ему нужно сделать несколько дополнительных действий, поворотов и обогнуть препятствие. Мы добавляем механику преград, одновременно закрепляя механику поворота. Это все довольно просто, и я уделяю этому столько времени просто для того, чтобы стал ясен дальнейший принцип. В последующих уровнях игроку встретятся более сложные в понимании механики, но принцип овладения ими не изменится. В начале мы не оставим ему выборов, кроме единственно верного, для решения, а затем будем постепенно добавлять звеньев в цепочку его действий.

Когда игрок в должной степени освоит механику, можно углубляться в ее суть. Что будет, если вернуть луч в расщепитель? Я знаю, игрок – нет. Осталось объяснить это ему без использования слов и подсказок. То есть создать ситуацию, в которой верным решением стало бы то, что я уже знаю о механике и хочу до него донести. Возможно, у него уйдет немало времени на перебор возможных вариантов, если он попробует решить пазл перебором или чрезвычайно сложным образом, но, если задача подобрана верно, этого произойти не должно. Можно просто дать человеку ответ, написав подсказку в духе «верни луч», и он создаст еще один, игрок это поймет, но радость «Ага!-момента» пропадет. Не будет ощущения, что он сам до этого дошел.


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

Свобода выбора

Как я пазлы делать учился Разработка, Мобильные игры, Инди, Инди игра, Gamedev, Пазл, Головоломка, Логические игры, Длиннопост

Иногда я ловил себя на мысли, что все возможные варианты я просто не смогу перебрать сам. Когда я создаю пазл, уже на стадии прототипа я играю в него и пытаюсь решить эффективнее, чем это сделано в исходном решении. Например, освободить один элемент и решить пазл меньшим количеством из доступных. Так как наш пазл дает довольно большую свободу по расстановке зеркал, в отличие от подавляющей массы таких игр, где зеркала привязаны к условным клеточкам на поле, то и вариантов перебора, а значит, и потенциальной возможности сломать пазл куда больше. И вот я завершил пазл и сажусь в него играть. Мне нужно перехитрить самого себя. И это довольно сложно на самом деле, обладая пониманием того, как именно устроен тот или иной уровень. Я точно знаю цепочку действий, которую нужно совершить, и в каком-то смысле это понимание меня ограничивает. Игрок, который впервые столкнется с этим пазлом, не знает, что его ждет. Он может перебирать любые варианты и пытаться пройти его с нахрапом, даже не вдумываясь в принцип его построения. И вот в этой креативной непоследовательности может найтись совершенно неожиданный для меня, как для создателя, способ. Более того, я, как правило, стремлюсь, чтобы сам уровень и его решение были элегантными и, если это возможно, красивыми, с эстетической точки зрения. Поэтому я намеренно оставляю отступы от краев экрана и не скидываю все элементы в кучу, стараясь располагать их согласно композиции сцены, как если бы это была картина. Но игрок не ограничен моим видением прекрасного. Если можно все элементы стянуть в один край, он это обязательно сделает, и если там будет расщепитель, то различные пограничные значения углов и скученность зеркал могут дать неимоверно большое количество лучей. И даже такой случай не должен ломать пазл.


С самого начала мы с командой решили не ограничивать игрока строго. Это был основной замысел - дать игроку свободу действий. Конечно, полной ее можно назвать лишь условно, так как зачастую именно какие-то условные препятствия и делают пазл пазлом. Дать игроку возможность делать совершенно что угодно сравнимо с паролем на бессмертие и убийством любого с одного выстрела в шутерах. Это весело короткий отрезок времени, но ни о каком вызове для игрока в такие моменты речи не идет. Ограничения - это не только препятствие на пути к получению удовольствия, иногда сами ограничения и есть удовольствие. Речь шла, конечно, о свободе в подборе вариантов. На мой взгляд, стоит разделять то, какой расстановкой решен пазл, и то, каким способом, с использованием какой особенности механики он решен. Мне кажется, привязывать игрока к конкретным клеточкам на поле – это, в каком-то смысле, упрощать ему подбор вариантов и частично отнимать у него развлечение. Если он захочет попробовать что-то совсем уж фантастическое, зачем ему мешать. Я для себя избрал следующий критерий правильности готового решения. Если уровень решен с использованием всех запланированных мной элементов, той механики или тонкости работы этой механики, что и задумано, значит, он решен верно. Вне зависимости от того, в каком месте игрок расположил доступные ему элементы или в каком порядке.


К слову, о порядке элементов. Были довольно специфические этажи на сложные для меня механики, где в силу ограниченного пространства наших уровней невозможно наращивать количество объектов до бесконечности. В результате механики, требующие для адекватной работы определенного количества элементов, ставили меня в тупик. Например, сигнал, угасающий от зеркала к зеркалу, требовал не менее трех зеркал, чтобы угаснуть. Но нам еще нужно заложить возможности для вариативности – это еще сколько-то объектов, необходимых для самой загадки, и несколько сверху для возможности перебора вариантов. Все это по итогу создавало нечитабельную мешанину на экране - проходить такой пазл просто неприятно. Это ощущение можно сравнить с тем, как достаешь запутавшиеся в кармане провода наушников или гирлянду из коробки. Тебе хочется скорее получить удовольствие, а нужно сидеть и распутывать все это, свернувшееся клубком совершенно неудачнейшим образом. С другой стороны, отказываться от механики не хотелось, она содержит в себе интересные принципы. Если игрок в решении изначальных задач не был ограничен в количестве зеркал и их расположении, их порядок на решение не влиял, то здесь, по сути, важно не только то, какое зеркало использовано, но и где именно оно находится и после которого идет. Это добавляет к базовой задаче определенный менеджмент доступных ресурсов, что углубляет игровой процесс. Схожих целей можно добиться при использовании цветных зеркал и фильтров, а также промежуточных целей. Благодаря этим нехитрым элементам можно создать внушительное количество разнообразных загадок с изменяющимися принципом и логикой решений.


Внезапно для меня оказалось, что сложнее делать простые уровни. Речь об уровнях с минимумом базовых механик и элементов, при этом не менее интересных и разнообразных, чем уровни со сложной механикой из кучи элементов. Безусловно, можно создать подобие лабиринта, где игрок может повернуть луч вправо и влево, а затем любой из этих выборов также приведет к выбору из нескольких доступных поворотов. И так до тех пор, пока одна из цепочек не приведет игрока к искомому финалу. Таких уровней можно наклепать сотни – знай себе меняй положения стен. Но будет ли это интересно на второй, десятый, сотый раз? На мой взгляд, нет. Мне хотелось добиться системы, при которой уровни не сводились бы к формуле: выбери направление из нескольких, затем повтори. Но что из средств создания остается нам тогда? Как вариант, мы можем предложить игроку, помимо выбора направления, найти наиболее «удачный», скажем, короткий путь. Например, можно ограничить подвижность части элементов, чтобы, манипулируя свободными, игрок достраивал решение. Мы можем предложить использовать элементы более эффективно, завязав загадку на повторном отражении света от одного и того же зеркала, или предложить найти правильную позицию для конкретного элемента, которая разрешила бы загадку, и много чего еще. Это все база, на нее сверху мы накидываем механики, которые должны разнообразить процесс и дать игроку в прежних условиях получить новые возможности, а значит, способы решения и, как итог, впечатления, и удовольствие от решения.

Порядок уровней и кривая сложности

Как я пазлы делать учился Разработка, Мобильные игры, Инди, Инди игра, Gamedev, Пазл, Головоломка, Логические игры, Длиннопост

А что если нам нужно ранжировать пазлы по сложности? Казалось бы, берешь и ставишь простую в начало, сложную – в конец. Тогда как понять, насколько один пазл сложнее другого и как их упорядочить? Можно, например, начать с количества действий, за которые игрок ее решит. Чем больше их потребуется, тем сложнее. Либо начать с того, насколько сложна сама механика или насколько нестандартный ход используется на уровне. И это все работало бы, если бы все игроки думали одинаково. На деле же сложная задача для одного оказывается простой для другого. Помимо индивидуального опыта, с которым каждый конкретный игрок подходит к той или иной головоломке, это часто зависит от выбранного способа решения. Кто-то пытается увидеть картину целиком, кто-то разобрать на составляющие и искать взаимосвязи частей, а кто-то решает от обратного, например, выстраивая головоломку от конца к началу. И в каждом конкретном случае один или несколько способов будут проще остальных, а значит, и загадка будет ощущаться игроком легче.


Фактически игрок, не зная, что перед ним простая загадка, может довольно надолго увязнуть, перебирая все чрезвычайно сложные варианты, приходящие ему на ум. В итоге к тому моменту, когда он дойдет до решения, затратив уйму времени, субъективно сама загадка будет ощущаться сложнее, чем она планировалась. Сложным покажется сам путь до ответа, если игрок не анализирует свои действия, а просто ищет способы решения, ориентируясь на затраченное время и число попыток, а не на реальную сложность ходов. И таких субъективных факторов масса. Остается только стараться достичь прогрессии сложности с пониманием того, что идеальной для всех ее сделать невозможно.


Я не мог точно назначить сложность пазла, даже глядя на ответ к нему. Все игровые сессии, что я видел, сидя рядом, из-за плеча игрока, давали противоположные результаты. Кто-то легче справлялся с первым, но страдал над поиском ответа ко второму, а кто-то наоборот. Плюс мое восприятие сложности того или иного пазла было также искажено тем, что именно я их и придумал, а значит, заранее знал суть. Для меня после десятков прогонов одного и того же они казались значительно проще и равны между собой, что, конечно же, необъективно.

Собрав немалое количество своих головоломок, я стал иначе смотреть на чужие. После того, как сам собираешь что-то по кусочкам, проще декомпозировать чужие задумки. Мой способ решения в подобных играх строится на понимании того, что сама загадка всегда имеет решение доступными нам средствами. Ее кто-то придумал, и ее можно понять и решить, если подобрать принцип, увидеть закономерности и ограничения, рассуждать, чего я пытаюсь добиться на каждом из этапов, что мне для этого доступно и т.д. Если это хороший пазл, его создатель что-то пытался мне сказать, осталось только понять, что именно. Это подкрепилось и на практике: были головоломки в рамках жанра, которые я бросал не пройдя, но, вернувшись к ним, уже набравшись опыта самостоятельной разработки, смог их осилить. Не скрою, это было приятно. Значит, не только игрок смог бы научиться чему-то в процессе игры, но и я в процессе ее создания.


Что я мог бы посоветовать человеку, который станет заниматься созданием подобного рода игр? Первое – изучите доступные вам механики. Первое время не пытайтесь создавать уровни с загадками, для начала вы сами должны научиться играть в игру. Разместите элемент на сцене, подумайте, по каким правилам он взаимодействует со всеми прочими доступными игроку элементами, есть ли в этом взаимодействии какие-то тонкости и нюансы, можно ли их донести до игрока через головоломку так, чтобы он тоже их увидел и понял. Когда вы переберете все, что могло прийти вам в голову, начинайте добавлять элементы. Попробовали с одним, переберите все возможные варианты с двумя или тремя одинаковыми, потом добавьте к этой куче другой элемент другого вида, работающий по другим правилам. Возможно, на стыке двух механик у вас выйдет что-то занимательное. В конце концов, полезным будет просто выставить на игровую сцену некий набор элементов, поиграться с ними без конечной цели. Тут пригодится фантазия, как когда вы смотрите на облака и пытаетесь понять, на что они похожи, зная, что на самом деле их форма случайна. Так и перебирая элементы и их положения, вы можете навести себя на интересную мысль. Тогда, очистив сцену от лишнего, вы такой своеобразной огранкой доведете головоломку до правильного вида. Более того, обязательно сохраняйте скриншоты, если в ходе таких перестановок что-то получающееся показалось вам интересным. Оно, возможно, не понадобилось вам в текущей головоломке, но, когда вдохновение покинет в следующий раз, вы сможете вернуться и поискать идеи в таких сохранениях. Когда за вашей спиной будут уже дюжины созданных пазлов, вам начнут приходить идеи без необходимости включать редактор. Вы сможете в голове представлять себе идею и расстановку и примерно прогнозировать то, к чему она вас приведет. Останется только включить компьютер и перенести все идеи в игру. Порой, когда вдохновение покидает вас, а работать и выдавать новые головоломки все еще нужно, можно попробовать посмотреть, как это сделано в подобных играх. Копировать чужое не нужно, но проанализировать то, что работает и почему оно кажется вам любопытным или, наоборот, скучным, будет полезно. В процессе такой декомпозиции чужих работ вам также может прийти мысль о том, как это возможно применить на своей практике. Ну и, конечно, спустя много времени полезно вернуться к вашим первым работам и, если уже забылось решение, поиграть в них: иногда можно найти любопытные ответы. Еще это возвращение дает понять, что вы выросли и какие-то из вещей в ваших первых работах нужно исправить с учетом вашего текущего уровня понимания их.

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

Показать полностью 2

Интервью с разработчиком игры Sea OF Pirates

Приветствуем вас, товарищи!
Сегодня предлагаем вашему вниманию интервью с Андреем Смирновым.
Об игре Sea of pirates.

Интервью с разработчиком игры Sea OF Pirates Gamedev, Разработка, Интервью, Инди игра, Vr game, Инди, Unity, Видео, YouTube

Так же Андрей набирает команду для разработки его игры. По всем вопросам писать в личку  Андрею

Интервью с разработчиком игры Sea OF Pirates Gamedev, Разработка, Интервью, Инди игра, Vr game, Инди, Unity, Видео, YouTube

Многие спросят про что интервью?!
Мы осудили как основные вопросы так и дополнительные.
-VR игры
-История создания проекта

-Движок

-Срок разработки

-Референсы

-Команда

-Музыка

И много всего другого)
Приятного просмотра)

Разработка игры

Наша группа

Показать полностью 2

[16] Zombie Shooter на Unreal Engine 5. Health Component. Part 1

В данном видео начнем работу над Health Component, а также добавим виджет для отображения здоровья персонажа.

GitHub - https://github.com/SalamandrSpb/ZombieShooter

Отличная работа, все прочитано!