• Привет. Расскажу про то, как устроен код в проекте, чего придерживался, что пришлось менять. Тут есть, о чем поговорить. Я поделюсь своим опытом.

    Разграничения

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

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

    Альманах

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

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

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

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

    Разграничения

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

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

    Альманах

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

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

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

    Бесплатный
  • Привет, коллеги. Пора переходить от описания девлога к описанию проекта. В этой статье я расскажу про структуру проекта:

    • Порядок файлов и папок, почему именно так, какие еще варианты бывают
    • Общая архитектура кода
    • Советы по организации кода в проектах
    • Порядок инициализации

    Файловый порядок

    В целом мы на работе использовали два подхода по организации файлов в проекте: сортировать в папки по типу файлов или по смысловой общности (аля ассет или игровая механика). Все скрипты лежат в одной папе, а все текстуры в другой? Это сортировка по типу файлов. Если же все текстуры, материалы, анимации и скрипты относятся к одной игровой механике и лежат в папке с игровой механикой, то это второй тип порядка в проекте.

    Долгое время мы придерживались первого варианта, но на практике рано или поздно приходишь к следующим выводам:

    • В процессе разработки ты работаешь не с файлами как таковыми, а с игровой механикой (с файлами, которые к ней относятся). Жутко неудобно искать скрипт в одной папке, править шейдер в другой папке, далеко от первой. Ты вроде работаешь над одним кирпичиком проекта (над одной игровой механикой), а файлы раскиданы по всему проекту. Это жутко неудобно.
    • Если ты скачиваешь готовые ассеты с Ассет Стора, то они скачиваются именно в выше изложенном виде – отдельная папка игровой механики, внутри которой все, что к ней относится: скрипты, текстуры, анимации, звуки.
    • Так и так ты используешь оба подхода, но в разных масштабах. Глобально папки сформированы по игровым механикам, но внутри этих папок есть папки Scripts, Sources, Prefabs.

    Совет. С самого начала и до конца работы на игрой придерживайтесь какого-то порядка и не переставайте его соблюдать. Несортированные файлы и непродуманная архитектура накапливается и с каждым разом и все больше усложняет процесс разработки. Тебе попросту больше не хочется в этом всем разбираться. Книга Роберта Мартина «Чистый код», как мне показалось, прежде всего учит придерживаться порядка. А какой именно порядок, это уже вам решать. Придерживайтесь.

    Привет, коллеги. Пора переходить от описания девлога к описанию проекта. В этой статье я расскажу про структуру проекта:

    • Порядок файлов и папок, почему именно так, какие еще варианты бывают
    • Общая архитектура кода
    • Советы по организации кода в проектах
    • Порядок инициализации

    Файловый порядок

    В целом мы на работе использовали два подхода по организации файлов в проекте: сортировать в папки по типу файлов или по смысловой общности (аля ассет или игровая механика). Все скрипты лежат в одной папе, а все текстуры в другой? Это сортировка по типу файлов. Если же все текстуры, материалы, анимации и скрипты относятся к одной игровой механике и лежат в папке с игровой механикой, то это второй тип порядка в проекте.

    Долгое время мы придерживались первого варианта, но на практике рано или поздно приходишь к следующим выводам:

    • В процессе разработки ты работаешь не с файлами как таковыми, а с игровой механикой (с файлами, которые к ней относятся). Жутко неудобно искать скрипт в одной папке, править шейдер в другой папке, далеко от первой. Ты вроде работаешь над одним кирпичиком проекта (над одной игровой механикой), а файлы раскиданы по всему проекту. Это жутко неудобно.
    • Если ты скачиваешь готовые ассеты с Ассет Стора, то они скачиваются именно в выше изложенном виде – отдельная папка игровой механики, внутри которой все, что к ней относится: скрипты, текстуры, анимации, звуки.
    • Так и так ты используешь оба подхода, но в разных масштабах. Глобально папки сформированы по игровым механикам, но внутри этих папок есть папки Scripts, Sources, Prefabs.

    Совет. С самого начала и до конца работы на игрой придерживайтесь какого-то порядка и не переставайте его соблюдать. Несортированные файлы и непродуманная архитектура накапливается и с каждым разом и все больше усложняет процесс разработки. Тебе попросту больше не хочется в этом всем разбираться. Книга Роберта Мартина «Чистый код», как мне показалось, прежде всего учит придерживаться порядка. А какой именно порядок, это уже вам решать. Придерживайтесь.

    Бесплатный
  • Привет, коллеги. Расскажу про игровой цикл и на какие игры ориентировался в процессе.

    Об игре и вдохновителях

    Игра будет по сути ареной, в которой противники нападают волнами. По завершении одной волны, игрок активирует следующую на определенной точке на арене. Примерами игр по волнам могут быть Killing Floor (pc), Only One (android), They are Billions (pc). С каждым разом противников будет больше и разнообразней. Придется учитывать их особенности и расставлять приоритеты.

    В свое время мне очень нравилась игра Painkiller (pc). Да, она была не самой оригинальной в плане игровых механик (хотя там были карты таро и специфичная пушка у героя, а у каждого оружия альтернативный огонь), но какая там была атмосфера! Мрачные текстуры подземелий и заброшенных зданий в совокупности с отлично подобранными звуками, отлетающие в виде тряпичных кукол противники и награда – душа поверженного противника!

    Противники

    Привет, коллеги. Расскажу про игровой цикл и на какие игры ориентировался в процессе.

    Об игре и вдохновителях

    Игра будет по сути ареной, в которой противники нападают волнами. По завершении одной волны, игрок активирует следующую на определенной точке на арене. Примерами игр по волнам могут быть Killing Floor (pc), Only One (android), They are Billions (pc). С каждым разом противников будет больше и разнообразней. Придется учитывать их особенности и расставлять приоритеты.

    В свое время мне очень нравилась игра Painkiller (pc). Да, она была не самой оригинальной в плане игровых механик (хотя там были карты таро и специфичная пушка у героя, а у каждого оружия альтернативный огонь), но какая там была атмосфера! Мрачные текстуры подземелий и заброшенных зданий в совокупности с отлично подобранными звуками, отлетающие в виде тряпичных кукол противники и награда – душа поверженного противника!

    Противники

    Бесплатный
  • Целью девлога для меня стало, как я писал в предыдущей статье, повышение мотивации в разработке и завершении игры (а еще немного покормить графоманство). Тогда же для вас этот девлог будет интересен по следующим причинам:

    • Я расскажу про технические подробности в разработке, это будет полезно разработчикам. Вообще, искать новые технические решения и удобные аналоги уже изученным вариантам – часть нашей работы. Нельзя стоять на одном и том же, делать то же самое на том же фундаменте (привет, Starfield). (Обожаю это видео, не реклама)
    • Расскажу про процесс разработки, что делал помимо написания кода и где брал. Моделирование, риг, анимация, озвучка, эффекты, геймдизайн, ИИ, локализация, сервисы, тестирование, ну еще менеджмент проекта, а в дальнейшем и дистрибуция. Я ничего не забыл? Вообще-то много вышло как-то, может показаться, что разработка игр – это тяжелый труд. Не показалось.
    • Расскажу о возникших проблемах и решениях. Сразу обозначу, что я стараюсь сразу решать возникшую проблему не костылями. «Если хочешь вставить костыль, сразу бей себя по рукам», говорил мне мой руководитель на предыдущем месте работы.
    • Черпнем чуть больше за пределами самого проекта. Например, какие бывают ИИ в играх и какой выбор сделал я.

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

    Тяжело делать игру одному. Например, разработчик Stardew Valley делал игру в одиночку. Разработчик возложил на себя и написание музыки, и рисование, и анимацию, по мере совершенствования навыков он множество раз переделывал уже готовые части игры. Не забудем про финансовые трудности (приходилось работать билетером в театре) и ожидания со стороны игроков и издателя, которые все никак не видели релиза игры. Эрик Бароне очень творческий человек, но все еще человек. А еще делать игру в одного – это долго, процессы не идут параллельно, появляются кранчи (переработки). В один момент он уснул прямо за столом. В конце концов игра вышла и получила много наград, но вряд ли вы бы захотели окунуться в такой процесс, зная все эти подробности. Как и в кооперативных играх, друзья делают все лучше: если делать не одному – это уже хорошо.

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

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

    • Я расскажу про технические подробности в разработке, это будет полезно разработчикам. Вообще, искать новые технические решения и удобные аналоги уже изученным вариантам – часть нашей работы. Нельзя стоять на одном и том же, делать то же самое на том же фундаменте (привет, Starfield). (Обожаю это видео, не реклама)
    • Расскажу про процесс разработки, что делал помимо написания кода и где брал. Моделирование, риг, анимация, озвучка, эффекты, геймдизайн, ИИ, локализация, сервисы, тестирование, ну еще менеджмент проекта, а в дальнейшем и дистрибуция. Я ничего не забыл? Вообще-то много вышло как-то, может показаться, что разработка игр – это тяжелый труд. Не показалось.
    • Расскажу о возникших проблемах и решениях. Сразу обозначу, что я стараюсь сразу решать возникшую проблему не костылями. «Если хочешь вставить костыль, сразу бей себя по рукам», говорил мне мой руководитель на предыдущем месте работы.
    • Черпнем чуть больше за пределами самого проекта. Например, какие бывают ИИ в играх и какой выбор сделал я.

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

    Тяжело делать игру одному. Например, разработчик Stardew Valley делал игру в одиночку. Разработчик возложил на себя и написание музыки, и рисование, и анимацию, по мере совершенствования навыков он множество раз переделывал уже готовые части игры. Не забудем про финансовые трудности (приходилось работать билетером в театре) и ожидания со стороны игроков и издателя, которые все никак не видели релиза игры. Эрик Бароне очень творческий человек, но все еще человек. А еще делать игру в одного – это долго, процессы не идут параллельно, появляются кранчи (переработки). В один момент он уснул прямо за столом. В конце концов игра вышла и получила много наград, но вряд ли вы бы захотели окунуться в такой процесс, зная все эти подробности. Как и в кооперативных играх, друзья делают все лучше: если делать не одному – это уже хорошо.

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

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

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

    О проекте. Игра разрабатывается на движке Unity, URP рендеринг, используются по максимуму встроенные и интегрированные системы (URP, Addressables, Remote Config, Analytics, Shader Graph, UniTask, FMOD, DoTween…). Целями проекта стали:

    • самореализация
    • небольшой шаг в публичность
    • демонстрация своих навыков разработчика

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

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

    Вдохновителями для игры стали:

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

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

    О проекте. Игра разрабатывается на движке Unity, URP рендеринг, используются по максимуму встроенные и интегрированные системы (URP, Addressables, Remote Config, Analytics, Shader Graph, UniTask, FMOD, DoTween…). Целями проекта стали:

    • самореализация
    • небольшой шаг в публичность
    • демонстрация своих навыков разработчика

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

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

    Вдохновителями для игры стали:

    Бесплатный