Хотя именно оно и будет. Итак, дело было месяц назад - я заболел. А прямом смысле, подцепил какую-то кашляющую заразу. Так что пришлось неделю сидеть дома, тупить и искать занятие. И тут то что-то накрыло. "А не изучить ли мне программирование". А лучший способ что-то изучить - что-то делать осмысленное. К примеру - игру. Неожиданно, да.
И так имеется в активе в виде меня одного:
-художник-трехмерщик. Посредственный и ленивый. Нет, конечно хайполи я умею, но 90% времени - сверх-лоуполи домики с сотню полигонов. Тупо, быстро, много. Засрать дальние планы. Особенности работы такие - парашютный симулятор не место для детальных моделей - тут время в секундах реакции и нет времени рассматривать что либо. Так что текстуры тоже "угадываемые". В общем, 3dmax, unfold, subs painter, world machine - знаю, использую. Ах да... Фантазии у меня почти нет - инженер покусал :( так что придумать какую-нибудь "хрень неведомую" - сложно.
Программист по заводским бумагам. Ну, я конечно изучал ассемблер, Фортран, паскаль... Но было это 20+ лет назад. Так что общее представление о структуре программ есть, но без детального углубления. Ну немного юнити скриптов было, да, грешен. C# - таки почему бы и нет. Читаем как юнити-скрипт, много документации, можно курить и напрягать чатгпт, переводя синтаксис к работающему и понятному.
Основной и единственный движок на работе - Unigine. "Вот это поворот". Ну а поскольку, держать в голове Unreal, Unity (да в них тоже на других работах работал) и большую часть времени проводить в третьем - перебор. Так что выбор пал на Unigine. Движок понятный, красивый , с некоторой кучкой заготовленного функционала и примеров. Но значительно меньше чем может дать комьюнити Unity, Unreal, почти без доступных уроков в интернете. Есть конечно набор роликов, в этом вашем закрытом Ютубе (и частью клонированное на правоверный рутуб) , но мало. Не без минусов "от разработчика" в виде физики "она есть, но пишите сами, это у нас не хайприорити".
Из игр же у меня в любимых заметных Horizon, Subnautica и Satisfactory. Вы чувствуете, да, к чему клоню? Имея топор и лопату, скрестить чижа, ужа и ежа. Подводный мир, крафт плюс заводы с цепочками производств и роботы. Ах да... Людей я особо не люблю, биомодели делать не умею, так что сразу к черту человеков. Во славу роботов!
Ну, на вступление хватит. Перехожу к процессу.
К чего начинается игра? С Лора? Истории, описания? Гейм-дока? А хрен - с управления. В моем случае - с него. Остальное шло как бусины в браслете - что я могу реализовать в своих возможностях. И начинать надо как раз с ГГ и и его управления. И вот тут тоже есть нюанс. Я д не хочу человеков. Так что это подводный аппарат. С раз так, значит динамика управления в трехмерном пространстве на отрицательных величинах глубины с использованием винтов для лучшей мобильности. Управление - клавиатура плюс мышь. И управление по мере изучения трансформировалось от полного контроля любого направления с клавиатуры (что было хардкорно и требует 6 клавиш для движения и 6 - для поворотов) до более аркадного: есть базовое движение, которое дополняется указателем мышкой. По сути эта некоторая виртуальная точка, за которой робот постоянно следит. Впрочем это тоже несколько изменил, дав возможность управлять только при нажатой правой кнопке, оглядываться - на левой, и зажав две кнопки получить полную мобильность и контроль за окружением.
У меня же дрон, робот подводный, так что ему нужен двигатель. Хотя бы визуальный. Выход нашел простой - сделать винт (один) и вращать его в нужную сторону в зависимости от того, положительная скорость или отрицательная. Но движение на одних и тех же двигателях может быть в разную сторону? Значит пишется код так, чтобы при выборе типа установленного двигателя он брал нужную скорость. Итог: один компонент и настройка для передних, задних, верхних и/или угловых двигателей.
Управление есть? Ок. Теперь нужно обратное - столкновения. Вот тут я убил наверное пару недель. Во-первых чтобы уметь предсказывать вероятность столкновения, во-вторых, чтобы исключать столкновения, и в третьих - вода. Первое решалось расчётом дистанции до дна, гашение скорости до удара, плюс отталкивание. Да, еще остается попытка взять "землю на таран", но тут включается столкновения. Благо движок это позволяет считать. Позже подсчет количества точек удара лег в основу счетчика повреждений. Который позже будет "портить" ходовые качества робота. Хочешь жить - будь аккуратен. Ну и вместе с ним - счетчик аккумулятора. Это наверное самый простой элемент пока - просто счетчик , который тикает от 100% в ноль. Позже тоже обеспечит проблемы игроку, с потерей скорости и уменьшению работы света.
Ну и вода. Вода вообще в движке - шикарная. Много лучше увиденных в Unity или Unreal. С работающим шейдером "из коробки". Внезапно это тоже поверхность, за которую нельзя выходить, и летать . но там меняется поверхность. Волны, шторм.... Пришлось идти на хитрый и топорный манёвр. Ищем точку на поверхности воды, и при малой дистанции включаем логику. Вода движется вниз? Толкает дрон вниз. А если волна вверх - отдает управление игроку. А чтобы добавить игроку дезориентации - во время движения вниз пытаемся поставить дрон по поверхности воды (т.е повернуть его в двух плоскостях). А при уходе волны, управление будет пытаться вернуть дрон в направлении камеры.
Интерфейс и оборудование. Мы же под водой, а на глубине ниже 100м становится темно. Очень темно. Да и дистанция обзора сокращается. Уж не говоря о изменении цвета. Ладно, за это все отвечает шейдер воды, можно настроить , но увлекаться не стоит. В общем, нужен сонар как средство увидеть дальше фонарей, и сами фонари. Но если фонари решились так же, как и моторы (разное включение в зависимости от глубины или направления движения), то сонар... Это сложно и просто. Сложно реализовать физическое решение возврата звукового сигнала, так что была просто сделана деталь, которая увеличивала свой размер. Тем самым скользя по всем объектам и подсвечивая их рельеф и детали.
Радар, как средство получения информации о объектах ЗА границей видимости, стал надстройкой внутри сонара. Это сфера, которая тоже расширяется, и опрашивает все элементы с которыми столкнется. А уж что сделать с этой информацией - надо придумать.
Камеры - тут тоже все очень просто. Делаем камеры и по нажатию кнопок - включаем нужную, выключая ненужные. Или сделать переключение по одной кнопке? Это я еще не решил....
Текстовая информация ведь уже накопилась? Глубина, расстояние до дна, состояние батареи и объём повреждений. Это уже нужно как-то показывать игроку, и желательно постоянно.
В общем, вот примерно так сцена обрастает разными деталями, моделями,
Итог рождается в небольшую демку.
Думаю, сойдет для начала попробовать?