Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
 Что обсуждали люди в 2024 году? Самое время вспомнить — через виммельбух Пикабу «Спрятано в 2024»! Печенька облегчит поиск предметов.

Спрятано в 2024

Поиск предметов, Казуальные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Gamedev + Программирование

С этим тегом используют

Инди Разработка Инди игра Игры Unity Компьютерные игры YouTube IT Программист IT юмор Python Картинка с текстом Юмор Все
632 поста сначала свежее
11
DevKitchen
DevKitchen
2 месяца назад
Лига Разработчиков Видеоигр
Серия Делаю игру на Unity3d

Делаю игру на Unity3d. Эпизод 0: Вступление⁠⁠

Здравствуйте, дорогие Пикабушники и Пикабушницы!

Меня зовут Егор. Я - unity3d разработчик. В свободное время я занимаюсь созданием своей собственной игры. Я создал youtube канал, где показываю процесс разработки, рассказываю как и что я сделал, делюсь результатами. А сейчас хочу присоединиться к сообществу разработчиков игр Пикабу. Как я понял, Пикабу не дает загрузить видео файлы больше 500мб, так что я буду делать репосты с youtube. Буду рад вашим комментариям и всегда готов обсуждать разработку игр! Надеюсь, мы подружимся! Приятного просмотра!

[моё] Gamedev Программирование Unity RPG Разработка Мемы IT Компьютерные игры Игровой дизайн Видео YouTube Инди Инди игра
2
1
Gagol
Gagol
2 месяца назад
Серия Как идет разработка

Что нового v29.2⁠⁠

Разработка идет своим чередом, 29 версия получила:

📥 редакторы заметок и предметов

Возможность вести журнал путешествия как для отдельных персонажей (доступно через их страницы), так и для всех персонажей пользователя (доступно через настройки приложения).

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

⚔️ поля урона и кубиков урона

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

Если ранее было одно текстовое поле для ввода значений вроде 2к6, 1к8 (1к10), то сейчас я разделил поля на уровни и типы, чуть сложнее для заполнения, но, надеюсь, удобнее в будущем для поиска предмета или выбора нового оружия при покупке.

🎉 альтернативные картинки вместо иконок в стиле Google

Эти картинки позволят не отвлекаться на бренным мир и смартфон в руках во время мгры, если вы погрузились в роль.

Спасибо художнику @xan_alostar за разрешение использовать арты в своей работе, я буду дополнять базу иконок самостоятельно и ближе к лету поделюсь с сообществом.

1/4
Показать полностью 4
[моё] Разработка Разработчики Application Программирование Настольные ролевые игры Gamedev DnD 5 RPG Длиннопост
0
CodePanda
CodePanda
2 месяца назад
Серия LOL Engine

LOL Engine⁠⁠

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

[моё] Без рейтинга Программирование Gamedev Инди Короткопост Текст
22
10
MaxEd
2 месяца назад

Что я узнал за 20 лет работы программистом в геймдеве⁠⁠

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

  1. Самое главное: разработка игр - это круто. Честно скажу - не любил ни школу, ни ВУЗ, и только придя в свою первую компанию я почувствовал себя на своём месте, среди людей, с которыми мне приятно общаться и работать. Конечно, это субъективное. Но очень важное. Я всегда представлял себе идеальную работу чем-то средним между НИИЧаВО Стругацких и Малого Тайного Сыскного Войска из книжек Макса Фрая, и по-моему, геймдев - это оно. Самое главное, что люди здесь не только делают игры, но и живут ими, играют сами, обсуждают их, болеют сердцем за то, что создают. Очень редко можно встретить в разработке человека, который просто приходит работать за зарплату, независимо от возраста. Конечно, есть и другие отрасли и компании, где такое норма, но, по рассказам, это, скорее, редкость.

  2. Тем больнее, когда ты чувствуешь, что делаешь что-то не то, но начальство/инвестор настаивает на своём видении. Поэтому я больше не хочу возвращаться в мобильный геймдев: все мобильные игры, над которыми я работал, провалились, и, вроде бы, мне с самого начала было видно, что они провалятся, но люди, дающие деньги, были уверены в обратном. Ну, и поскольку я не совсем целевая аудитория мобильных игр (играю на ПК, в основном, а если на мобиле - то не совершаю много покупок в игре), то я всегда утешал себя тем, что они, наверное, знают, что делают - всё-таки, своими деньгами рискуют. Практика показала, что нет: зачем мы в одной компании два года делали прямой клон "Clash of Clans" с "улучшенной графикой" - так и осталось загадкой, поскольку в результате оказалось, что игрокам в "Clash of Clans" не нужна лучшая графика, и проект закрылся спустя месяц после релиза.

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

  4. Все игровые движки, существующие дольше нескольких лет - тоже набор жутких костылей, неисправимых багов и странных решений, которые теперь уже нельзя менять, потому что на них завязан код сотен или тысяч игр. Что не мешает иногда авторам движков при выпуске очередного малозначительного обновления всё к хренам сломать. И не верьте тем, кто хвалит (да и ругает) тот или иной движок за производительность: хорошая работа игры - это всегда кровь, пот и слёзы команды конкретной игры. На любом движке можно сделать круто, а можно говно. И круто - всегда сложно. Если делать всё не думая и второпях - то игра всё равно может получиться, и даже быть весёлой, но никогда не будет нетребовательной к железу, скорость работы кода (и ресурсов) - всегда обратно пропорциональна скорости разработки. Но "прожорливость" игры мало влияет на продажи, кроме редких случаев (новая платформа, например: у нас была гонка для Windows Phone, которая на голову обставляла конкурентов по скорости работы на этой платформе за счёт самодельного движка, даже на дешёвых китайских HTC, и в результате мы зарабатывали с мобильной Винды больше, чем с Android или даже Apple).

  5. Зарплаты программистов в геймдеве хорошие по меркам России в целом, но не сказать чтобы топовые по меркам IT (знакомый по собачьей площадке удивлялся, почему я живу в спальном районе на окраине Москвы, а не в одной из башен Сити; ответ - потому что я близко не зарабатываю так, чтобы позволить себе даже однушку в престижном районе, ибо цены на недвижимость в Москве окончательно объелись ухи). Перейти из геймдева в бизнес-разработку с заметным повышением зарплаты вполне реально. Но там и скучнее будет, и ответственности больше - серьёзный баг в игре это неприятно, но, как правило, не страшно, и не ведёт к судебным искам против компании. Впрочем, вопрос скуки, конечно, субъективный. Лично мне пришлось на некоторое время перейти от игровых задач к более "приземлённым" (навигация в помещениях и криптокошелёк), и мне не понравилось - душа хотела бегающих по экрану человечков, ездящих машинок, чего угодно, но не просто сухих цифр и бесконечной войны с Bluetooth LE или протоколом Bitcoin. Хотя казалось бы, код - он везде код.

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

  7. Игроки, конечно, очень плохо представляют себе сложность/стоимость некоторых компонентов игры. Особенно это касается поддержки мультиплеера и модов - и то, и другое, на самом деле, ОЧЕНЬ сложно и дорого, если не заложено изначально. С другой стороны, даже разработчик не всегда представляет себе, сколько будет стоить добавить какую-то, вроде бы, мелкую фичу в игру, и понимает всю глубину пропасти, в которую катится, только после недели-другой усердной работы. Как простой и не очень катастрофичный пример, меня в определённый момент начало бесить, что в игре, которую мы тогда разрабатывали, в бою довольно медленные анимации, и я захотел сделать возможность их ускорить/пропустить (это вообще моё больное место, я во всех играх всегда включаю все возможные ускорения, даже если авторы игры их не предусмотрели: вы знали, что если сначала запустить игру F117 Stealth Fighter 2, выйти из неё, а потом запустить Sid Meier's Civilization - то юниты в "Цивилизации" будет двигаться намного быстрее?). То, что на первый взгляд казалось приключением на 20 минут (ну, сделать галочку и добавить множитель где-нибудь, правда ведь?) оказалось задачей на несколько дней, породившей, а результате, несколько багов и необходимости поддержки этого самого ускорения в будущем. Потому что если просто ускорить течение времени - то будет некрасиво и неудобно, а чтобы сделать хорошо - надо точечно и ПО РАЗНОМУ подпирать разные аспекты игры. Например, передвижение работает так, что мы каждый кадр телепортируем персонажа на следующую клетку пути без анимации, а в применении умений надо именно ускорять анимации (и не у всех умений, а только у некоторых), но при этом ещё не забыть ускорить полёт снарядов на ту же величину - это отдельный код. Или вот задача "добавить поиск по имени предмета в инвентаре" - она выливается в переделку части интерфейса, и отдельные увлекательные танцы с бубном, чтобы это и на чёртовых консолях, где нет ни мышки, ни клавиатуры, это тоже как-то работало.

  8. Многие программисты не умеют в отладку. Ну, то есть, не то чтобы совсем не умеют, но умеют не очень хорошо. Приходилось встречаться с подходом, когда человек заявлял "ой, ошибка не в моём коде, пусть другая команда разбирается, это у них!", что могло приводить к перекидыванию одной и той же проблемы между отделами, и увеличению сроков исправления. Нет, я не говорю, что надо бросаться исправлять чужой код - это чревато, если ты в нём не разбираешься, как в своём. Но вот попробовать проследить причину, и принести другому человеку уже не просто баг "оно сломалось", а результат расследования в формате "у вас вот тут, кажется, такая-то ошибка, потому что когда мы вам отправили вот такие вот данные в таком-то состоянии, оно ломается таким-то образом, хотя мы ожидаем, что оно будет работать вот так" - это, по-моему, должна быть норма. Тем более, что тот факт, что следы бага уходят в чужой код, далеко не всегда означает что ошибка в нём: возможно, косяк всё-таки у тебя, просто надо копнуть глубже. Чаще всего такое происходит при взаимодействии игровой логики и пользовательского интерфейса: тебе приходит баг вида "я нажимаю на кнопку, а оно ничего не делает", ты видишь, что оно ничего не делает, потому что в UI происходит ошибка при нажатии кнопки, но потом оказывается, что ошибка эта возникает потому, что это ТВОЙ код ранее привёл UI в невалидное состояние.

  9. Я люблю отладку (и оптимизацию, которая, по сути, есть отладка проблем с производительностью) больше, чем все остальные аспекты программирования. Это всегда увлекательный детектив - выяснить, какое же сочетание обстоятельств привело к ошибке. Есть в этом азарт охоты, или, может быть, исследовательской работы: ты строишь гипотезы, проводишь эксперименты, проводишь археологические раскопки в коде, иногда даже опрашиваешь свидетелей. Написание нового кода тоже по своему интересно, но для меня это задача со слишком многими неизвестными, что вызывает некоторый нервяк. Отладка же - работа с "закрытой" системой, и ты точно знаешь, что где-то в этой системе есть правильный ответ на твой вопрос ("почему оно сломалось?"), и тебе просто надо его найти.

  10. Люди - тупые, ленивые, невнимательные и забывчивые существа. Я - в первую очередь. Поэтому: всё что можно автоматизировать, должно быть автоматизированно. Если в коде где-то есть два связанных места, которые всегда надо менять одновременно, но при этом между ними нет жёсткой связи - рано или поздно об этом забудут, и будет весёлый баг. Всеми силами такого надо стараться избегать. Меня убивает, что другие отделы часто работают на договорённостях вида "давайте вот так делать, а по другому не делать", которые хорошо если где-то зафиксированы, а часто есть только в головах тех, кто их обсуждал когда-то. Всё, что не может быть автоматически проверено - рано или поздно будет проёбано, и вопрос только в цене этого проёба. Кстати, документация в геймдеве - относительно редкий зверь. Актуальная - так вообще. У нас даже был мем "былинный геймдев", потому что вся важная информация передавалась из уст в уста, как легенды и предания у примитивных народов. Впрочем, чем студия больше - тем и документации больше, надо признать, иначе совсем тяжко.

  11. Не верьте тому, кто говорит вам, что основная проблема геймдева - пиратство. Основная проблема геймдева - менеджмент, который не понимает, что хочет, или понимает, но хочет фигню. Чтобы там всякие Мацанюки и прочие фанаты StarForce-подобных систем ни говорили. До сих пор горжусь тем, что меня на старом DTF забанили "за пропаганду пиратства", а "директор" одной мелкой российской студии приходил ко мне в уютную ЖЖшечку и писал в личку чтобы я "жил и боялся", и как он "меня найдёт" (в индустриальных кругах у него была кличка "Леонид Позвонид", потому что писал он угрозы вообще всем подряд, и один раз чуть не был за это бит, когда на конференции встретил одного из тех, кому угрожал). Ну и ни для кого не будет секретом, что весь российский геймдев (и значительная часть западного) вырос на пиратстве - почти ни у кого из нас в детстве не было лицензий на компилятор, или на Фотошоп, да и на DOS и Винду тоже. И у любой российской IT-компании как минимум в "млаледчестве" обязательно был сетевой диск с "почти лицензионным", как мне один раз сказали на Горбушке, софтом.

  12. Вторая основная проблема геймдева - клиническая недооценка сложности задач, и, как результат, сроков и бюджетов. И я честно ХЗ что тут делать. Домножение на "Пи" или "e" не всегда помогает. Мы как-то раз запланировали пользовательский интерфейс для игры сделать за 2 месяца, а потратили больше года, потому что к моменту начала работ выяснилось, что, собственно, графику для оного интерфейса, которую должен был предоставить заказчик, никто ещё делать и не начинал.А когда её доделали - художник, работавший над ней, уволился к хренам, и после этого любые элементы, которых нам не хватало, мы собирали из кусочков, своими кривыми программистскими руками.

  13. Искусственный интеллект ПОКА не заменяет ни программистов, ни художников, ни сценаристов, ни тестеров. Он МОЖЕТ делать то, что делают все эти профессии, но пока что делает это плохо и неконсистентно. Я не знаю, у кого там ИИ уже за него половину работы делает, а в моём опыте ты чаще встречаешься с его галлюцинациями, когда он выдумывает на пустом месте несуществующие библиотечные функции, а если его в это ткнуть носом - вообще бред начинает нести. На вопрос "а в чём тут может быть проблема" - отвечает совсем плохо, то есть к отладке непригоден. Не знаю, может типовые сайты он скоро сможет клепать (с типовыми дырами в безопасности, хе-хе), но в играх, я думаю, ещё несколько лет у нас есть, даже если развитие будет идти ускоряющимися темпами. А в тот момент, когда ИИ сможет ПОЛНОЦЕННО заменить программиста - у человечества уже будет сильно больше проблем, чем безработица.

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

Показать полностью
Что я узнал Gamedev Программирование Мат Текст Длиннопост
9
9
CodePanda
CodePanda
2 месяца назад
Серия LOL Engine

LOL Engine день 3⁠⁠

Всем привет.

Из комментов в прошлых постах я кое что изменил. Огромное спасибо всем, кто помогает мне учиться:

Переделал структуру на гите и вынес include по совету из коммента

LOL Engine день 3 Программирование, Разработка, Gamedev, Инди, C++, Длиннопост

Include статической библиотеки

Взял spdlog для логов. Пока не оборачивал - сделаю позже.

Убрал Timer и this_thread::sleep

LOL Engine день 3 Программирование, Разработка, Gamedev, Инди, C++, Длиннопост

переделанный основной цикл

Как советовали, вместо того, чтобы заниматься фигней и получать состояние выполнения bool, сделал возврат состояния EXIT_SUCCESS/EXIT_FAILURE прямо из Application, ну и убрал все инициализации в конструктор

LOL Engine день 3 Программирование, Разработка, Gamedev, Инди, C++, Длиннопост

int main стал аккуратнее

Структура проекта больше похожа на другие проекты на гите:

src / include / thirdparty / example (куда убрал базовый проект. Он пока пустоват. Займусь)

LOL Engine день 3 Программирование, Разработка, Gamedev, Инди, C++, Длиннопост

Более аккуратная структура

Инициализация запускаемого проекта проходит теперь через два extern.

Один прокидывает настройки приложения (разрешение, название, лимит кадров, название стартовой сцены)

Второй регистрирует сцены в SceneManager

LOL Engine день 3 Программирование, Разработка, Gamedev, Инди, C++, Длиннопост

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

Основной работы прибавилось, так что занимаюсь пет-проектом пореже. Спасибо всем кто участвует и помогает!

Ссылка на пустоватый репозиторий

Показать полностью 4
[моё] Программирование Разработка Gamedev Инди C++ Длиннопост
3
7
BackpackSeekers
BackpackSeekers
2 месяца назад
Unity

Unity 6 для начинающих: первые трудности и как их избежать⁠⁠

Только осваиваете Unity 6? Добро пожаловать в клуб! Вот с чем сталкиваются многие новички, и как с этим справиться:

Сложности и их решения

  1. Интерфейс кажется перегруженным

    • Проблема: Куча окон, панелей и непонятных кнопок.

    • Решение: Включите режим Absolute Beginner (Edit → Preferences → Interface → снимите галочки с Advanced Features).

  2. Проект не собирается без ошибок

    • Проблема: Unity иногда выдаёт странные ошибки при первом запуске.

    • Решение: Всегда проверяйте Console (Ctrl+Shift+C) — там часто есть подсказки.

  3. Не хватает актуальных уроков

    • Проблема: Большинство туториалов — для старых версий Unity.

    • Решение: Ищите ролики с хэштегом #Unity6 или фильтруйте по дате (последние 3 месяца).

  4. Тормозит даже на хорошем ПК

    • Проблема: Unity 6 требует больше ресурсов.

    • Решение: Отключите Real-time GI (Window → Rendering → Lighting) и уменьшите Resolution Scaling.

  5. Непонятные слова: ECS, DOTS, Burst…

    • Проблема: Кажется, будто нужно учить новый язык.

    • Решение: Пока просто игнорируйте их! Сначала освоите базовую логику Unity — потом разберётесь.

Лайфхаки для старта

  • Сохраняйтесь чаще (Ctrl+S каждые 5 минут — это не шутка).

  • Используйте готовые ассеты (например, Unity Essentials в Asset Store — бесплатно!).

  • Начните с 2D — там меньше сложностей, чем в 3D.

  • Не бойтесь спрашивать — в официальном Discord Unity новичкам всегда помогают.

Главное — не пытайтесь объять необъятное. Unity 6 как иностранный язык: сначала учите "привет" и "спасибо", а потом уже сложные предложения

Показать полностью
[моё] Программирование Разработка Программист Unity Gamedev Текст
6
7
CodePanda
CodePanda
2 месяца назад
Лига программистов
Серия LOL Engine

LOL Engine день 2⁠⁠

(пожалуй, буду нумеровать посты по дням)

Итак, сегодня после работы поработал немного больше.

Из полезностей - абстрагировал мусор в int main() в класс Application, добавил Logger и Timer (на очереди WindowManager и Renderer)

LOL Engine день 2 Программирование, Gamedev, Инди, Игровой движок, C++, Длиннопост

LOLEngine/Internal/main.cpp

Из важного - сделал ServiceProvider.

LOL Engine день 2 Программирование, Gamedev, Инди, Игровой движок, C++, Длиннопост

LOLEngine/Include/Engine/Core/ServiceProvider.hpp

Синглтоны в проекте будут, куда без них, но складывать их в глобальном пространстве я не люблю, так как такое трудно отлаживать. Поэтому, в Application появился ServiceProvider, в который я начал складывать все синглтоны для последующего прокидывания вглубь приложения. Вместо Logger::getInstance() будет _serviceProvider->GetService<Logger>()

LOL Engine день 2 Программирование, Gamedev, Инди, Игровой движок, C++, Длиннопост

LOLEngine/Internal/Engine/Core/Application.cpp

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

Репозиторий все там-же

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

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

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

Огромное спасибо всем, кто задает вопросы в комментах и тычет носом в ошибки - постараюсь учесть и исправить. Вырасти, так сказать, над собой.

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

Как всегда - жду ваши плюсы/минус/комменты. Пошел кодить дальше

Показать полностью 2
[моё] Программирование Gamedev Инди Игровой движок C++ Длиннопост
12
7
CodePanda
CodePanda
2 месяца назад
Лига программистов
Серия LOL Engine

Девлог LOLEngine 0⁠⁠

Привет, игроделы!

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

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

На сегодня успелось только собрать базу на гит и вызывать окошко. Обо всем по порядку:

Завел проект на гите и стянул его на машину. Далее создал вот такую структуру папок:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Код движка расположился в папке LOLEngine, и собираться он будет в виде статической библиотеки. Точка входа int main() тоже будет расположена здесь.

Код проекта будет в папке Game, сборка - в исполняемый файл.

Ну и все сторонние библиотеки будут складываться в папку ThirdParty.

Начну с подключения сабмодулей к своему репозиторию. Мне понадобятся: сейчас - glfw, потом - glm (сильно потом сюда будут спиханы все json, imgui и прочее)

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Сабмодули подключил, обновил, проверил наличие в папке ThirdParty. Далее - прежде чем открывать папку репозитория в VS Code, следует сразу создать файл .gitignore (чтобы в комит не шло то, что не должно туда идти) и файл CMakeLists.txt в корне репозитория, и по одному CMakeLists.txt в папках LOLEngine и Game

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Открываю папку в VS Code и создаю файл main.cpp в LOLEngine/Internal и пустой GameSettings.cpp в Game/Sources (в каждый проект надо добавить как минимум один файл исходного кода, чтобы CMake не ругался)

Далее перехожу в корневой CMakeLists и пишу следующее:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

CMAKE_SUPPRESS_REGENERATION добавил, чтобы при сборке в IDE не создавался таргет для теста сборки

Движок и исполняемый проект подключаю через add_subdirectory. CMake найдет файлы CMakeLists в соответствующих папках.

CMakeLists.txt проекта Game выглядит так:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

В туториалах часто видел, как все добавляемые файлы прописывают вручную в add_executable или add_library.

Здесь я использую file(GLOB_RECURSE) чтобы рекурсивно пройти по папкам и найти все файлы, сохранить их в переменную GAME_SOURCES и GAME_HEADERS и дальше добавить в проект. Для сборки достаточно добавить только cpp и c файлы, но чтобы hpp, h были видны в IDE если кто-то соберет под Visual Studio или XCode, добавляю и их.

source_group(TREE) сохранит структуру каталогов при сборке под IDE

Далее на очереди CMakeLists движка:

Нахожу OpenGL, аналогично Game, прохожусь рекурсивно по папкам в поисках исходников, подключаю в статическую библиотеку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Далее папку с внутренними заголовками подключаю как PRIVATE, а папку Include и загаловки glm, glfw - как PUBLIC, чтобы они были видны в Game

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Ну и заканчиваю подключением библиотек. Если в папке сабмодуля есть CMakeLists.txt высокая вероятность, что ее можно подключить через add_subdirectory и не париться вообще (Imgui потом придется собирать самим)

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

С этим закончили. Теперь если в main.cpp написать простой int main(), то все запустится.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост
Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Заработало

Теперь проекту нужно передать размер и название окна в движок (позднее и некоторые другие данные). Для этого в LOLEngine/Include/Engine/Core создаю файл AppSettings.hpp и объявляю простую структурку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Pikabu! Сделай форматирование кода в тексте! задолбался все картинками ставить!

Все внешние функции и методы я сложу в файле LOLEngine/Include/Engine/ExternalSettings.hpp где пока будет объявлена одна extern функция GetApplicationSettings()

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

В папке Game/Sources/ создаю файл GameSettings.cpp и пишу реализацию функции GetApplicationSettings();

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Возвращаюсь в движок - в main.cpp и получаю первые настройки из исполняемого модуля Game.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост
Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Запускаю и радуюсь окошку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

На сегодня это все. Успел мало, но надеюсь разогнаться на днях. Спасибо тем, кто подписался и @AABVGD, за идею написать под веб-сборку. В следующем посте постараюсь подключить OpenGL, glad и emscripten для сборки цветного окошка под desktop и web. Ссылка на репо

Ставьте плюсы/минусы, пишите в комментах что я сделал так, а что не так.

PS: Если кто знает как вставлять код с форматированием на Pikabu, расскажите

Показать полностью 17
[моё] Разработка Программирование Gamedev Инди Длиннопост
7
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии