Ответы пользователя по тегу Разработка игр
  • Книги для создания своего игрового движка?

    @majstar_Zubr
    C++, C#, gamedev
    Андре Ламот программирование игр для windows

    lodev.org/cgtutor/raycasting.html

    https://www.youtube.com/watch?v=kmECa4Gcckc&list=P...

    Потом смотри статьи, курсы, туториалы, доки, книги, посвященные OpenGL, OpenAL, разработки многопоточных приложений, открытые репозитории движков на Github, вот здесь хороший по компьютерной графике https://www.scratchapixel.com, про ai книга Ian Mullington, вообще, списку конца нет, движок - это программная система из ряда программных продуктов, поэтому либо строишь свой в основном из открытых библиотек, либо умираешь от старости не доделав до конца.
    Ответ написан
    Комментировать
  • Как написать простую 3 д игру используя C++ или другие языки не используя игровой движок?

    @majstar_Zubr
    C++, C#, gamedev
    Если не делать движок, то после добавления третьего-пятого игрового объекта (уровня геймдизайна) и рефакторинга у вас появится свой игровой движок все равно.

    Мало инфы по библиотекам потому что там просто биндинги функций OpenGl. Все мясо в Кронос Вики, туториалов по opengl много.

    Если собираетесь устраиватьс на позицию C++ developer в фирму, у которой есть свой движок, то свой кривой игрушечный движок делать нужно в обязательном порядке. Если в фирму, которая работает на UE - нужно мастерить и знать UE вдоль и поперек и твердо владеть C++. Если на C# - нужно знать вдоль и поперек C#, устройство Net, желательно - уметь работать с unmanaged кодом + Unity, вдоль и поперек.

    Если вы не целитесь на работу C++ разработчика графики и tools в фирму со своим движком, то свой движок писать конечно стоит, но далеко не в первую очередь.

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

    Касательно вашего вопроса буквальный ответ: для игрушечного/некоммерческого движка/игры без разницы на каком языке дергать DirectX/OpenGl/Metal. Но если писать игровой движок, то лучше всего на C++ и биндинги на любом встраиваемом языке или компилируемом можно предоставить конечному пользователю без особых проблем (времени много конечно уйдет). Если чисто игру - тут нужно завязываться на библиотеку или игровой движок, который уже предоставляет какой-то пайплайн для производства игр.
    Ответ написан
    Комментировать
  • Самый легкий в изучении игровой движок для С++?

    @majstar_Zubr
    C++, C#, gamedev
    Только не путайте лёгкое и быстрое в использовании с лёгким и быстрым для понимания.

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

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

    Cocos 2d creator - это не движок, а набор инструментов для полного workflow для разборки игры, с акцентом на ассеты. Документация по Cocos2-x - вот что должно вас интересовать в первую очередь.

    В общем случае, можно брать любой движок, у которого толстая документация и много примеров.
    Ответ написан
    Комментировать
  • А как в шутерах отрисовываются летящие пули?

    @majstar_Zubr
    C++, C#, gamedev
    Как скажет геймдиз, так и будет.

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

    Это было также важно и в мультиплеере Сталкера.

    А вот в киберспортивных - игра не про это, и пули обычно не рисуются, рисуются только эффекты пули в полете, если это нужно. Эти эффекты надо будет делать детальнее и красивее, если используется механика замедления времени.
    Ответ написан
    2 комментария
  • Как сделать контролируемые обмены в онлайн-игре?

    @majstar_Zubr
    C++, C#, gamedev
    Можно сделать простую машину состояний, для каждого игрока, которая при обмене будет менять состояние с более жадного на более щедрое.

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

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

    Обычно балансировать такую систему сложно, поэтому к этой машине добавляют обратную связь от фактической стоимости итогового предмета, который игрок в конце концов получил. Так называемый показатель жалости: если игра вышла в сильный плюс, то машина переходит в более щедрую очередь состояний, либо просто применяется состояние для стратегии гарантированного выигрыша игрока.
    Ответ написан
    Комментировать
  • Сколько предметов может хранить сервер в игре?

    @majstar_Zubr
    C++, C#, gamedev
    Во-первых, ознакомьтесь с моделью памяти C#, как работает сборщик мусора, какие есть кучи, как они заполняются и опустошаются, как работать с IDisposable, using, и оборачивать unmanaged ресурсы.

    Потому что на самом деле есть выбор: делать сервер на .Net либо на LLVM. В принципе, на LLVM garbage collector свой, и напридумать модно много чего интересного.

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

    Но стоит так же упомянуть, что в зависимости от выбранной стратегии обработки соединений

    ( а относительно игровых движков, это просто сводится к названию используемых библиотек)

    1 инстанс сервера может держать 100к соединений, но ваш игровой room может обслуживаться и многими нодами, не обязательно одной. Более того, у вас может быть не одна nosql база данных, а целый кластер.

    Другими словами, вам стоит ознакомится с концепциями ACID, кластеризацией и микросервисной архитектурой. В завершение можете почитать про Kubernetes.

    Когда вы проработаете эти темы, вы сможете уточнить свой вопрос до конкретных технических требований и сами сможете на него ответить.

    PS: Касательно максимума соединений к абстрактным коням в вакууме, считается, что один демон, держащий 10к соединений - это граница highload. В конкретных цифрах обычно все сводится к доле процессорного времени за интервал допустимой задержки ответа сервера на конкретной платформе включая конкретное железо и конкретную сетевую карту + тесты доступа из точек по всей планете.
    Ответ написан
    Комментировать
  • Надо ли чтобы сделать такую игру иметь сервер?

    @majstar_Zubr
    C++, C#, gamedev
    Да, потому что такие игры стимулируются мета-геймом, который в самом примитивном случае имеет leaderboards и сезоны. Если нельзя померить у кого ствол длиннее, то играть и смысла нет. А эти данные надо хранить где-то, плюс нужна админка для гейм-мастера / маркетолога / аналитика / админа и какой-то сбор статистики, чтобы систематически своевременно реанимировать умираещее сообщество. В принципе такой сервер можно собрать на любом веб-хостинге, для софт-ланча хватит.

    Если из игры не делать бизнес, а так, для портфолио / с друзьями поугарать, то хватит и просто одной таблички в БД, в которой все клиенты подключаться напрямую будут.

    Можно и локальный сервер/БД, но тогда игра по локальной сети. Можно поставить какой-нибудь Termux, или через Userland / Linux deploy, Anlinux развернуть linux под ARM, поднять сервер с бд прямо на своем смартфоне.

    А если без сервера, то там подход другой должен быть, игра должна на мини-играх вытягивать, которые могут быть сами по себе самодостаточными.
    Ответ написан
    3 комментария
  • Мультиплеер для уже созданой игры?

    @majstar_Zubr
    C++, C#, gamedev
    Если все самому делать, то нужно быть знакомым с методами отладки и архитектурными шаблонами многопоточных приложений; четко понимать архитектуру игровых движков - потому что её нужно будет ломать и пересобирать для мультиплеера, даже если это splitscreen / hotseat; сечь в сетевом взаимодействии: и интерфейсы, и устройство библиотек (на C); C/C++ и Java interop.
    Ну, и конечно же, методики борьбы с сетевыми задержками, реконнектами.

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

    А все те решения "на базе" рассчитаны на клиентов на той же "базе", потому что поставлять серийно решения вышеперечисленных вопросов для совсем кастомного кода невозможно.
    Ответ написан
    Комментировать
  • Game-dev путь. Что мне делать?

    @majstar_Zubr
    C++, C#, gamedev
    У вас должна быть цель стать профессионалом в области. Потому что только профессионал может выбирать, с кем работать, где работать, над чем работать - над крупными проектами для правительств, над банковским софтом, над веб-проектами или над играми.

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

    Любовь к учению - единственное, что может поддерживать на пути, потому что путь очень долгий. Многое будет непонятно и с первого раза, и со второго. Иногда и с третьего, потому что вы на самом деле не поняли базовые вещи. Или выбрали неправильную книгу. Или начали читать правильную книгу слишком рано. А узнаете вы расхождение между объективным знанием и собственным все равно не раньше, чем столкнетесь с проблемой на практике. А по-другому никак.

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

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

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

    Так что, запасайтесь попкорном и начните с языка Си. Освойте структурное программирование. Алгоритмы, структуры данных. Архитектуру компьютера, ОС. Не торопитесь как можно быстрее неправильно понять как можно больше вещей за кратчайший промежуток времени. Перечитывание и практикуете, пока не станет понятно так, что сможете научить кого-нибудь другого. Макконнелл, Роберт Мартин, Кент Бек, Эрик Эванс, Мартин Фаулер + 1 год дополнительного быдлокодинга на java и c# и c++ и у вас появится понимание ООП, ФП, типовые устройства моделей памяти и сборщиков мусора. Ещё за год научитесь писать настоящий ООП код, читать чужой код, даже если он написан в процедурно-макаронном стиле как книгу. Но надо ли вам эти три скучных года, потерянных полностью для личной жизни? Не проще ли получить solid knowledge и постепенно получать практику в среде опытных специалистов?

    Подытожу: становитесь профессионалом, на это у вас уйдёт ~10 лет после введения привычки учится в свободное время. Периодически смотрите на требования вакансий и составляйте себе древо знаний, которое хотите получить.
    Ответ написан
    Комментировать
  • Что представляет собой движок в игровой разработке?

    @majstar_Zubr
    C++, C#, gamedev
    В широком смысле движком в игровой разработке называют набор ПО и утилит, которые как могут быть представлены в виде одного комбайна в случае Unity, Unreal Engine, CryEngine, так и набора разных ПО и утилит, результаты работы которых компонуются вместе с помощью игровых библиотек и фреймворков таким образом, что получается игра.

    В узком смысле, игровым движком называют ту часть ПО, которая
    1) комбинирует мультимедиа ресурсы
    2) скрипты игровой логики
    3) скрипты всякой бизнес логики (аналитика например)
    И самое главное - 4) контроллер ввода и 5) вывод результирующего кадра игры.

    Если платформа некий комп с некой операционной системой, то фактически движок это ПО, которое запускается на нем и полностью все вышеперечисленное делает. Сюда входят ПК, консоли, смартфоны, игровые портативные устройства, и даже Brick Game и "Ну, погоди", в которой волк яйца ловит.

    Если платформа браузер, то движок делает первые три пункта, остальным занимается браузер.

    Если платформа мессенджер или терминал, то от движка там практически ничего, кроме игровой логики нет.

    Есть разные движки разных специализаций, например, есть движок для интерактивных книг - в таких движках даже простого визуального блочного DSL хватит, просто вставляешь куда надо текст, картинки, музыку, тайминги и игра готова. Если задаться целью, то в качестве игровоггтдвидка можно использовать ПО для офиса: конструктор презентаций, табличный процессор (есть игры на Excel).

    Игровые движки-комбайны могут все, или, если исходный код закрыт - то почти всё. Специализированные игровые движки могут все, что нужно в пределах специализации на жанре. Разница обычно в GUI, API, языке реализации, направленности на платформу и лицензии использования (которую, между прочим, можно обсудить в частном порядке)
    Ответ написан
    Комментировать
  • Разработка онлайн игры?

    @majstar_Zubr
    C++, C#, gamedev
    Да, разобраться стоит, хотя бы по причине найти тот вид сетевого клиента, который потребуется, чтобы позже прийти к решению - какие требования должны быть к движку - там уже будете выбирать из целого зоопарка, либо перепишите протип на libgdx в минимальный движок.

    Все зависит от логики бекенда, потому что из коробки libgdx требует только:
    1) привязки к основным событиям контекста платформы, на которой запускается игра
    2) определённый игровой цикл
    Все остальное вы пишите сами.
    Ответ написан
  • Хорошие платные курсы геймдизайна на русском?

    @majstar_Zubr
    C++, C#, gamedev
    Такого нет. Возможно вам подойдут Русскоязычные курсы от dev2dev для старта.

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

    Так что кроме намерения снизить запрату геймдизайнераов в СНГ в этих курсах я не вижу.

    У меня системное видение открылось только после 20 книг по геймдизайну и спустя часов 70 видео с конференций gdc, devgamm и участия на гейм джемах, и конечно, спустя N прототипов.
    Хотя, если честно, геймдизанер, который не может в маркетинг и системный анализ это так себе геймдизанер, а на изучение и практику рекламного и и маркетинга услуг может год уйти. А системный анализ и продуктовый менеджмент - это тоже годик. Есть ещё сценарное дело, на него можно полгода потратить. А про математику , и про аналитику игр, я просто не буду упоминать, потому что если математику можно параллельно тренировать, то аналитику без маркетингового и продуктового бекграунда, а без самого игрового продукта даже смысла начинать изучать нет, аналитика проще всего в деле изучается.

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

    @majstar_Zubr
    C++, C#, gamedev
    Игровая платформа (в узком смысле) - это контекст, в котором осуществляется игра.
    Контекст является абстракцией высокого уровня, поэтому на него обычно просто ссылаются и почти никогда полностью не определяют терминально.

    В частности, компьютерная игра может осуществляться на определенной разновидности вычислительных устройств. Однако, как отметил А. С. Таненбаум в книге "Архитектура компьютера / Structured Computer Organization", hardware и software функционально являются взаимозаменяемыми. Из этого следует, что если игра рассчитана на инженерный калькулятор, игровую приставку, тетрис типа BrickGame, то в нее играть можно не только на непосредственно на техническом устройстве, но и в эмуляторе устройства, который исполняется на PC или смартфоне Android, или в браузере. Но фактически игра существует в контексте
    технического устройства, поэтому игровая платформа для этой игры - тетрис, калькулятор, приставка.

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

    Steam - это набор сервисов для игровой платформы PC + магазин,
    Stadia, Unity, Vulkan, Intel, .NET - технологии,
    x64 - общее именование серии 64-битных процессоров.

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

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

    В списке терминов:
    PlayStation, PlayStation 4, PC, Windows, , Mobile, Android
    Первые 3 относятся к употреблению в узком смысле, последние 4 в широком.
    Windows в узком смысле будет игровой платформой, если это, например, квест по поиску уязвимости или ARG, относящееся непосредственно к линейке данных ОС.
    Ответ написан
    Комментировать
  • Хочу понять, с чего мне начать путь в геймдев?

    @majstar_Zubr
    C++, C#, gamedev
    Когда был на твоём месте, я погрузился в маркетинг, управление проектами, управление людьми, геймдизайн и сценарное дело, между делом делал прототипы на js, потом посмотрел в сторону движков и фрнймворков на java, параллельно делался прототипы, а потом стало понятно, что надо было меньше других слушать и сразу смотреть в сторону C++, C# и Python, теперь ещё и Rust.
    Если въедешь в C++, то с остальными языками вообще проблем не будет никаких.
    А по делу - сначала определись с направлением и группой специальностей.
    Ответ написан
    Комментировать
  • Какой 3D движок для разработки игр на Android выбрать?

    @majstar_Zubr
    C++, C#, gamedev
    Когда я искал ответ на этот вопрос, то я пришел к выводу, что (если свой писать не вариант) либо берешь Unreal Engine и убираешь лишнее, либо берешь Godot и добавляешь недостающее.
    Ответ написан