Ludum Dare, отчёт № 2

Кажется, в первый раз в своей жизни я успел реализовать в своей игре всё, что было задумано

Приветствуйте Death Spacing — новую веху в жанре космосим-сурвайвл-хоррор. Шучу.

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

Суть в том. что Unity хранит все координаты в float. А у этого формата ограничение в 6-9 символов, судя по справке. Допустим, мы хотим хранить два числа: 1.001 и 100000.001. На первое точности хватит, ведь там всего 4 знака. На второе точности не хватит и движок сократит его до 100000.

Пришлось очень быстро переделывать всю систему, чтобы не корабль двигался в космосе, а космос двигался вокруг корабля. Ну, вроде смог. Теперь корабль крутится на месте, но двигается именно космос.

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

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

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

Теперь у корабля есть подсистемы, которые могут выключаться при столкновении с метеоритом. У вас может начать кончаться кислород или топливо. Или же отключиться управление корабля. Или освещение. Это надо срочно чинить! На корабле есть панели, к которым нужно подбегать и использовать их, чтобы чинить подсистемы.

Теперь главный герой может прыгать по стенам корабля. Не знаю, зачем я это сделал, но очень хотелось сделать и вот оно. Нажимаем на клавиши 1-6 и теперь гравитация указывает в другую сторону, причём относительно корабля. Очень крутая механика, вот бы было больше времени, чтобы придумать ей применение лучше.

Сделал офигительный саундтрек на задний план. Причём, очень просто: нашёл генератор музыки. Скачал оттуда трек, засунул в аудасити, понизил темп, понизил скорость, добавил ревёрба. Вот и саундтрек! В первый раз таким занимался, очень эффектно.

Что могу сказать в целом — очень удивлён своей производительности. Смог сделать 3D-игру с кучей физических механик, причём всё довести до конца. Пропы выглядят не так плохо, учитывая то, что мне нельзя было использовать готовые текстуры (разве что сгенерированные во время фестиваля).

С точки зрения гейм-дизайна, мой подход совершенно не изменился: накидаем кучу механик, кучу возможностей, авось это заработает и превратится в игру. Кажется, я остался где-то в начале нулевых, рядом с Сидом Мейером и Уильямом Райтом. Но времена пришли другие, другие и нравы, сейчас это не годится. Недостаток таких джемов: если ты выбрал концепцию — ты обязан идти с ней до конца, у тебя просто не будет времени передумать и переделать всё заново.

Не зря поучаствовал. Хотя, может и зря. Работа не ждёт.

9
3 комментария