О чем тред: буду постить прогресс разработки моей игры Жанр: смесь immersive sim и survival horror Двигло: православный GODOT 4.4 Сеттинг/сюжет: в разработке (но планируется что-то не совсем очевидное)
Сразу отмечу три вещи: 1) Я не программист, не знаю паттернов и рот их ебал 2) if/else - это настоящая сигма мейл гигачад БАЗА 3) Я могу использовать хорошие практики движка/программирования, а могу и нет, просто потому что мне так самому удобно или проста нравится
Проект находится на ранней стадии разработки. Пока готово: - Базовое перемещение (+ прыжки, присед, плаванье, разные виды лестниц) - Базовый инвентарь (подбор предметов, стаки, перемещение) - Менеджер оружия (подбор, смена, атака, перезарядка, разные состояния во время различных действий игрока, расчет траектории атаки) - Разное по мелочи: смена уровней, взаимодействие с предметами и т.п. - Базовая система сохранений (уровень, состояние уровня и предметов на нем, состояние инвентаря, данные игрока)
Что дальше? - Сейчас занимаюсь проектированием и созданием базового AI для врагов - Далее начну работать с террейном и собирать первые прототипы уровней параллельно выпиливая допиливая необходимые механики
Для AI врагов выбрал behavior tree (или чет такое). По реализации: базовая сцена с врагов + подключаемый ресурс. Сделал наброски тестового алгоритма. Только вот что начал понемногу реализовывать.
В идеале в будущем сделать менеджер боевой ситуации, чтобы враги обменивались инфой и в зависимости от этого принимали решения (не прям что-то крутое, обойдусь без GOAP).
>>1048410 1. Compatibility рендерер выбери. 2. Сожми разрешение экрана в 2 раза. 3. Переключи физику на Jolt - он быстрее. 4. В материалах SHADING_MODE_PER_VERTEX.
>>1048445 >Вот этот проект рассматривал? >https://github.com/Phazorknight/Cogito Не, я не настолько прошарен в движке. Если возьму что-то такое готовое и потом попробую модифицировать под себя, то запутаюсь нафиг. Мне легче сделать попроще, но самому с минимум "черных ящиков" в проекте. Ну и самому разобраться бывает интересно.
>Можно ещё заюзать встроенный режим записи: Спасибо, посмотрю, что там
>Или ты не хочешь, чтоб мы читали твои надписи?.. Не думал, что кто-то в серьез будет схемки читать. Так, визуально глянуть. Схема есть = работа идет. Прикрепил черновую версию в нормальном разрешении
>>1048508 Это да, понимаю. Периодически бывает много работы, так что скорость разработки варьируется.
Сегодня в основном в коде копался. Итерационно делаю BT. Сделал крайне простую версию поля зрения врага. Далее буду делать вектор видимости, чтобы враг не замечал врага через стены
>>1048516 Ну тип вместо "правильного" использования .tres для оружия я просто запихнул сцены с ними в ноду игрока, да еще и для каждого отдельный скрипт сделал переделаю потомможет быть
>>1048558 >"правильного" использования .tres для оружия А кто сказал, что это правильнее отдельных нод?
>запихнул сцены с ними в ноду игрока, да еще и для каждого отдельный скрипт сделал Я точно так же делаю. Потому что для этих нод бывает нужно добавить какие-то другие ноды: меши, частицы, звуки... А скрипт отдельный - у разных оружий разное поведение, очевидно. Зачем это пихать в ресурсы?
>переделаю потом Если хочешь хранить PackedScene оружия и делать add_child(weapon_scene.instantiate()) при каждом переключении, то это может вызвать у тебя лишние задержки, особенно в плане системы частиц оружия. Переключение оружия должно быть быстрым, т.е. желательно держать все ноды в дереве сцены (и переключать их видимость + работу: например, process_mode = Node.PROCESS_MODE_DISABLED).
Другое дело, если у тебя 100500 вариантов оружия у неигровых персонажей, которые будут использовать единственный вариант в течение всей своей жизни: логично, что им нужна только одна нода оружия, а остальные варианты остаются нераспакованы.
>>1048585 >А кто сказал, что это правильнее отдельных нод? Ну? было ощущение, что лучше делать через tres. И держать в сцене игрока только те оружия, которые он нашел. Инстанцировать их один раз при загрузке в _ready. И сохранять инфу о найденных орудиях в файле сохранения. Но вот так не делать: >хранить PackedScene оружия и делать add_child(weapon_scene.instantiate()) при каждом переключении
>Я точно так же делаю. Потому что для этих нод бывает нужно добавить какие-то другие ноды: меши, частицы, звуки... Ну тогда успокоил. Значит так оставляю, спасибо
___ Еще по быстрому накидал состояние атаки для врага. Продвинутое обнаружение игрока уже завтра начну пилить
>>1048883 Советую сделать не один рейкаст, и не только из центра. В идеале поставь моба чуть за стенкой, и как со стороны игрока лучше и приятнее будет смотреться, так и оставить.
>>1048908 Советую сделать не один рейкаст, и не только из центра Да, в будущем скорее всего так и сделаю, чтобы враги не были слепыми болванчиками. Пока так оставлю для прототипа. >В идеале поставь моба чуть за стенкой, и как со стороны игрока лучше и приятнее будет смотреться, так и оставить. Вот тут не совсем понял, о чем ты
>>1048908 У ОПа чибик из интернета в роли плейсхолдера, а ты насоветовал уже обвесить его сотней рейкастов и оценивать с точки зрения ощущений игроков, лол.
ОП делает >immersive sim и survival horror В переводе на русский это "ААА фотореализм с реалистичными зомби/монстрами/маньяками".
По сути он начал совсем не с того конца. Нужно было сначала посмотреть, осилит ли он хотя бы статичную сценку, где одна только графика ужасает игрока. Это движение мобов за игроком - как клей между сцен.
>>1048910 >чтобы враги не были слепыми болванчиками Иногда лучше, чтоб игрок мог последить за мобом тайком, тем более тут survival horror: игрок должен обосраться от одного вида крякозябры за углом.
>Вот тут не совсем понял Он предлагает тестировать методом проб и ошибок, рассматривая ситуацию с точки зрения игрока - что именно увидит игрок, прежде чем моб его заметит?
>>1048911 >"ААА фотореализм с реалистичными зомби/монстрами/маньяками". Хорошее предположение, но нет. Да, раньше каждый первый второй проект на каком-нибудь юнити пытался в реалистичную графику, за неимением интересных механик. Но мне такой подход не близок, как и ААА графон. Ну и конечно я понимаю, что пилить проект уровня deus ex или resident evil с бюджетом в полторы банки пива охота крепкое не очень реалистично. Поэтому проект будет куда компактнее.
>Иногда лучше, чтоб игрок мог последить за мобом тайком Тут от типа моба зависит. Какие-то могут быть более "глупыми", например, люди. А какие-то наоборот более агрессивные и наблюдательные, чтобы на контрасте создать эффект опасности. В общем, это вопрос уже геймдизайна. Я конечно такое прорабатываю (в диздоках), но внедрять такое еще рано, пока не реализованы bазовые механики
>Он предлагает тестировать методом проб и ошибок, рассматривая ситуацию с точки зрения игрока Ну ты верно заметил >У ОПа чибик из интернета в роли плейсхолдера
Поборол n-ое кол-во багов и запилил патрулирование. Через простое и удобное добавление маркеров в експортный массив. Можно чтобы ходил по кругу, либо туда-сюда. Дальше буду делать корректный возврат на маршрут патрулирования - сейчас враг возвращается не к ближайшей точке, а к последней, которая помечена "следующей". А потом займусь более продвинутым поиском игрока, чтобы болванчик не сразу отваливался, если потерял того из виду, а шел к последней точке, где игрок был замечен и начинал поиск на какое-то время
Тред не умер Я просто заболел + были перелеты-переезды + очень много работы. Но сложа руки я не сидел. Что сделал: 1) Чтобы враг не сразу отваливался, когда теряет игрока из виду, а еще какое-то время его преследовал "по пятам". 2) Запилил рабочий поиск игрока на местности: Враг окончательно потерял игрока -> Идет к последней точке, где видел игрока -> Осматривается -> Произвольное кол-во раз ходит по местности -> Если не нашел, то уходит.
Анимации, чтобы осмотреться, для болванчика у меня нет. Поэтому заменил на дрыганье руками. Пока все это пилил вылезло n-ое кол-во багов, которые я успешно пофиксил. На вроде того, что точка поиска в navigationregion3d лежит не на прямой, то болванчик сбивается с курса и идет бесконечно в одну сторону. Переписал дочернее BT для состояния поиска, вынес движение в отдельную функцию и т.п. - все пофиксил.
Надеюсь за выхи успеть доделать состояния: рандомное брожение туда-сюда, охрану (сиреч стоять на месте и осматриваться), возврат на исходную позицию после преследования. Но тут вроде ничего нового. Должен успеть.
>>1050103 Сделай нормальную тестовую локацию, чтобы она приблизительно была похожа на финальную, но без избыточных деталей и текстур. Пол, стены, потолок. Масштаб соблюдай, добавь трипланарную сеточку, например: https://kenney.nl/assets/prototype-textures Головастика тоже отмасштабируй или замени на подходящего по пропорциям к окружающей среде.
Просто сейчас ты делаешь сферическую корову в вакууме. Потом придётся подгонять под реальные локации, ограничения геймплея игрока и т.п. Гугли реальные прототипы ААА игр - там вот начинают с грейбоксов локаций, а потом уже геймплей, мобы.
>>1050134 >Просто сейчас ты делаешь сферическую корову в вакууме Ага, я знаю. Просто не хотел даже более-менее нормальные модели и условия делать, пока не будет какая-никакая кодовая база (хоть пусть и придется по параметрам подгонять под реальность). А то понаставил бы красивых серых кубов, а кода ноль.
Но так-то ты прав конечно. В ближайшее время начну делать нормальную тестовую локацию. За ссылочку спасибо, текстурки схоронил, буду использовать.
>>1050103 >Надеюсь за выхи успеть доделать состояния: рандомное брожение туда-сюда, охрану (сиреч стоять на месте и осматриваться), возврат на исходную позицию после преследования. Сегодня все это доделал. Завтра еще кое-чего по мелочи намучу и в пн начну тестовую локу собирать и вообще курить мануалы по Terrain3D