Vitta Lucis: дневник разработки

Хей, меня зовут Сергей Исаев и я продолжаю заниматься разработкой своей игры Vitta Lucis - наёмница из частной церковной гильдии, с которой связано Пророчество о Забвении. Соберите отряд и отправляйтесь в приключенческий экшен в духе дарк фэнтези. Отчасти вера в бога оказалась ошибкой - проклятья, демоны и прочая нечисть существуют.

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

Потом приходит мысль: "А почему на прямую в материале не менять цвет свечения, в зависимости от элемента?" - окей, полез искать, как достучатся до материала во встроенной системе частиц. Народ там свои шейдеры готовит для этого, чтобы умели понимать нужные переменные... а оказалось, что в исходниках название параметра отличается от того, что в редакторе от Unity. Нужен "_EmissionColor", а отображается как "Emission Map". Хотя, мб просто я не сразу понял, так как в документации он упоминается, но главное - работает.

Да, да, тайминги ударов ещё в работе, урон наносится раньше анимации...

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

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

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

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

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

И ещё, базовую атаку тоже можно прервать, если попасть в окно между началом анимации и моментом нанесения урона.

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

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

Vitta Lucis: дневник разработки

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

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

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

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

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

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

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

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

Vitta Lucis: дневник разработки

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

Тут давеча опять записывали, но дуршлаг отлично отдыхает на даче. Решил поэкспериментировать с кастрюлей на голове и микрофоном внутри… какофония ещё та получается при записи.

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

Проблема с отсутствием настоящего рыцарского шлема и забытым металлическим дуршлагом на даче решена до более-менее терпимого уровня. Так же перед воспроизведением немножко играю в случайность высоты звука между 95% и 105% - чтоб мальца по разнообразнее было. Теперь правда забрало нужно будет переделать у паладина, а пока работаю с остальными звуками. Да-да, там есть небольшой фрагмент с закулисья записи озвучки.

Как же всо таки тяжело весь вечер искать звуки для эффектов. Музыку не включить, стрим или видео на фоне не посмотреть, а только наигрывать, перебирать, обрабатывать да слушать всяк варианты.

Тут заметил один странный момент с щипком пальцами для зума. Тестируя на разных телефонах всегда всё было более-менее одинаково. Ну я отличий на замечал.

Давеча запускал на бабушкином планшете, а там Xiaomi Pad 5, ну и у него менее вытянутый экран. Так вот, там скорость зума была на много медленнее. Ну я подумал, что это наверно из-за того, что диагональ меньше в процентах, так как я для расчёта щипка использую пройденное расстояние в процентном соотношении экрана.

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

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

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

Vitta Lucis: дневник разработки

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

Из поддержки ответили, признали что брак с размером, попросили прислать назад - переделают.

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

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

Так же листья, падающие с деревьев, тоже участвую в освещении, и знаю о существовании теней. Тестировал на телефоне, меньше 120 кадров не падает, ну только пока не нагреется и не начинает троттлить, там уже 80-90 держит.

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

Vitta Lucis: дневник разработки

В общем, продолжаю разработку, кому интересно следить за проектом, то вот Telegram и ВК - там я рассказываю про процесс чаще, а тут уже выкладываю итоги за последнее время. Спасибо, you're breathtaking!

55
33
8 комментариев

выглядит прикольно, ждём

1
Ответить

хе, спасибо)

1
Ответить

Тайминг удара и эффекта не совпадает.

1
Ответить

да, я об этом говорил, всё в процессе)

Ответить

сел делать одно, в процессе задумался о втором, стал делать третье... в итоге можно сделать нихуя

1
Ответить

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

Ответить