Геймдизайн и Немного псевдокода физики в игре Phisia от разработчика

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

В закладки
Тизер игры для девгамма 2018

ИДЕЯ

Была следующая: Все любят собирать паззлы, значит и паззл в виде 3д тоже должен быть интересным. В реальности это Лего и ему подобные конструкторы. Но так как мы делаем видеоигру, которая должна отличаться от реальности - "Стараться улучшить реальность, сделать красочнее, добавить чуть чуть магии и т п", то обычные реалистичные конструкторы заменены на любые модели каких то реальных объектов, которые не очень привычно представлять в роли конструкторов.

Конвертация ИДЕИ в прототип

Разобравшись с этим я прикинул, что реализовать склейку объектов довольно сложно, если эмулировать управление кусками в реальном 3д пространстве по реальным законам, потому что параметров управления настолько много, что игра превратиться в тяжкое испытание, а мобильные игры должны быть в первую очередь простыми и понятными, а уже потом хардкорными(когда игрок освоится в новом мире и научится им хорошо управлять). Изначально я вообще хотел каждый кусок объекта всегда оставлять на своем пространственном положении и оставить игроку только возможность вращать объект, но не перемещать его - это был минимальный враиант, потому что я не обладал навыками программирования в юнити вообще и последний раз программировал около 10 лет назад в университете на Delphi :)) Игру я хотел сделать в любом случае и в любом виде, поэтому ставил минимальные задачи и двигался к их выполнению последовательно.

Программирование в юнити просто волшебное, особенно после года страданий с UE и его Блюпринтами:) . Компонентная система действительно дает очень низкий порог входа для всех людей независимо от их опыта.

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

Тут уже пришлось всё переписывать заново, потому что код для вращения совсем не использовал физику - не обладал инерцией и вращался слишком плоско. Новый подход - каждый объект наделить физическими данными и просчитывать с помощью физического движка. Убрав гравитацию получилось очень интересно двигать объекты и сталкивать их в воздухе в попытке собрать - Игра явно становилась от этого интереснее, динамичнее и уже мало походила на обычные 2д паззлы.

Живой Стрим игры на ДевГамм 2018

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

Реализация Физики

До состояния тизера создание управления кусками прошло примерно 100 итераций частичного переписывания и 5 раз полного. Основной проблемой было несоответствие вида из камеры - физическим осям "кусков", потому что управление передавалось 2мя осями экрана X,Y в 3д мир XYZ при этом игрок видел всё под немного кривым углом для придания перспективы и объема сценам. Поэтому первое полностью реально управление со всей честной физикой - вызывало некоторое недовольство у тестеров, потому что повороты всегда вели себя не очень адекватно(особенно когда смешивается центр масс и моменты инерции). Поэтому пришлось при вращении не использовать физику, а делать всё Чётко в плоскости экрана с помощью Transform.Rotate() вместо AddTorque(). Эмулировать физически корректную инерцию пришлось фейком, но зато объекты перестали при вращении глупо себя вести. Это был прорыв в управлении, после него гораздо больший процент людей мог играть комфортно и получать от этого удовольствие, а не боль и страдания :)

К сожалению это была не последняя проблема. Далее Выяснилось что cклеенные объекты без Физики не могут корректно за собой вращать своих соседей и в случае склеянных кусков совместный поворот ужасно некрасиво дергался :) Поэтому тут пришла на помощь уже физика и пришлось дописать условие при котором неслитые куски вращались бы Без Физики, а склеянные хоть с одним - вращались уже чистой физикой. В этом случае инерция работала автоматически и анимации стали плавными и красивыми.

После создания прототипа управления:

Основная задача была научиться определять "победу" игрока, для этого нужно было в абстрактном месте сборки объекта "знать" какой то параметр, который был бы настолько уникальным, чтобы случайное стечение игровых обстоятельств никак не могло Случайным образом выставить игре состояние "Победы",а так же нужно было каким то образом знать какой кусок к какому должен подходить.

Для этого я решил пойти самым простым путем в начале и На старте игры считал расстояние всех кусков друг от друга и все их повороты друг относительно друга в локальных координатах. Таким образом существовала уникальная комбинация, которую практически невозможно повторить не собрав объект правильно. Но из-за проблем с плавающей запятой и погрешностей, которые это дает при сравнении - постоянно появлялась проблема - последний кусок при склейке мог создать состояние победы до того момента как встанет на свое место и повернется на нужный угол. Всё из-за той же физики, объекты имели неудобные стыки и создавали дополнительные коллизии между собой что не позволяло им занять необходимый позиции и углы поворота, поэтому этот параметр приходилось искусственно подбирать для разных объектов немного свой. Это было крайне неудобно, экстраполируя работу над уровнями когда их запланировано больше 250 штук (каждый объект разбит тремя разными способами, чтобы игрок при переигровке не получал преимущества)

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

В итоге за 2 месяца получилось создать около 24 игровых уровней в 3х разных локациях 4 разных игровых механики и успеть собрать тизер для ДевГамм :)

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

Новая игра, рабочее название - АнтиПаззл
{ "author_name": "Константин Ермолаев", "author_type": "self", "tags": [], "comments": 25, "likes": 39, "favorites": 18, "is_advertisement": false, "subsite_label": "indie", "id": 24123, "is_wide": false }
{ "id": 24123, "author_id": 20106, "diff_limit": 1000, "urls": {"diff":"\/comments\/24123\/get","add":"\/comments\/24123\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/24123"}, "attach_limit": 2, "max_comment_text_length": 5000 }

25 комментариев 25 комм.

Популярные

По порядку

Написать комментарий...
2

Интересная статья, автору удачи! Игра выглядит очень неплохо. Какой штат сотрудников ее создал?

Ответить
1

1 программист, 1 3дшник - левел/энвайронмент дизайнер и 2 моделлера игровых объектов.

Ответить
1

Любопытно. За два месяца получилось собрать почти готовую игру, при этом почти не имея навыков программирования. Впечатляет. Ну и Юнити, выходит, всё-таки настолько юзерфрендли?

Ответить
1

по сравнению с Анрилом это небо и земля :)

Ответить
1

Вы наверное последний раз версией UE 4.5 пользовались. Если Вы чего-то не знаете, это значит что движок плохой.

Ответить
1

А он и не плохой. Всё дело исключительно в подходе к конструированию игры.

Ответить
0

Просто некоторые с пеной у рта хвалят эти блюпринты, мол кодить не нужно совсем.

Ответить
0

ну по сравнению с С++ на анриле они гораздо лучше, но с# прощает все ошибки с++, поэтому программировать на на порядок проще и эффективнее.

Ответить
1

В общем выхлдит, что лучше накодить что-то самостоятельно выходит проще и быстрее. Ну а связываться с С++ - себе дороже, да. Везде куча упоминаний о том, что он страшный и сложный.

Ответить
0

основная проблема с++ в том что происходит полная рекомпиляция проекта анрила, а это может занимать и по 30 секунд
Поэтому без идеального знания языка и конкретно движка анрил - кодить на нем НЕРЕАЛЬНО. Порог вхождения туда очень высокий.

Ответить
1

Кодить в Анриле это Анрил ))))00

Ответить
0

И не зря хвалят, на блюпринтах можно сделать 100% логики игры, не использовав ни строчки кода на С++. Начиная от контроллера персонажа и управления машиной состояний, до сетевой части. Скорости работы и контроля процесса на блюпринтах ошеломительная в сравнении с обычным кодингом. За счёт компиляции кода блюпринтов в С++ код скорость выполнения остаётся весьма высокой, что позволяет не переписывать даже сложные моменты на чистый С++.

Ответить
0

Это насколько плохо нужно знать движок, что на UE4 было сложнее, чем на унети?

Ответить
1

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

Ответить
0

Да, это интересно. Побольше бы такого контента.
В последнее время DTF все больше напоминает DTF. Это радует.

Ответить
0

Подкину еще идейку - нужен физически верный симулятор магнитов, их попросту нет, что крайне странно.

Ответить
0

А какой можно на этом геймплей сделать? Сделать магниты довольно просто, нужна более конкретная идея для игры.

Ответить
0

Я не вижу это игрой, скорее физический движок для энтузиастов-экспериментаторов. На ютубе забейте магнитный двигатель, там такой пласт роликов на ютубе. Люди заказывают магниты с алиэкспресса, чтобы экспериментировать, тратя огромные деньги, а можно было бы сэмулировать процесс на компьютере. Хотя это сложно, т.к. то как устроены магнитные поля и как они друг с другом взаимодействуют, все еще спорный вопрос (спойлер - не как в учебниках физики за 8ой класс). Поэтому вероятно как бы не старались сделать похоже, основываясь на законах, в реальности это все равно будет работать несколько иначе.. но попытаться можно. Думаю можно обыграть все это каким-то игровым процессом и привнести какой-то геймплей, типа собирание простых механизмов из тех же учебников навроде Bridge Builder или Crazy Machines. А еще есть PC Building Simulator. Что-то придумать всегда можно, магниты интересная вещь )

Ответить

Комментарий удален

0

Уважаемый автор а можете вы потратить свое время и погрузить читателей в мир фейковой физики?

Ответить
0

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

Ответить
–1

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

В сторону мобильных девайсов не думали?

Ответить
0

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

Ответить
–1

Это у вас купили полностью проект? Сумма существенная, если не секрет (цифры не спрашиваю, просто интересно, стоит ли оно того) ?

Много проблем с разработкой мобильной версии? Графика всё-таки довольно неплохая

Ответить
0

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

Ответить
0

Круто, удачи вам с релизом
С интересом почитаю про техническую часть, если напишете :)

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Новая игра Ubisoft на релизе выглядит
точно так же, как и на E3
Подписаться на push-уведомления