Очень давно хотел поделиться своей историей о том, как очутился в GameDev’е, поскольку, никогда туда не стремился, но «имеем то, что имеем».

Отношение к играм в детстве

Я не из тех, кто с детства обожал видео игры и всю жизнь жил с мечтой стать их разработчиком. Хоть в детстве компьютер (Pentium II) и появился рано, лет в 5, особого интереса к играм у меня не возникло - играл, как и все, во что придется (что удастся раздобыть): Герои Меча и Магии III, Дальнобойщики 2, Half Life, Serious Sam, NFS Porsche Unleashed и т.д., одним словом - классика. Однако, все же одну игру я отмечу, которая больше всего запала в душу и про которую не многие знают - Re-Volt: гонки на всевозможных радиоуправляемых машинках с кучей трасс и разнообразным оружием начиная от ракет, заканчивая «капитошками».

Экран загрузки Re-Volt
Экран загрузки Re-Volt

Знакомство с Lego

Как вы, наверное, уже могли догадаться из названия статьи, все время в детстве, которое я мог бы потратить на видеоигры, я тратил на Lego - вот за это хочу сказать огромное спасибо моим родителям. Первый набор у меня появился в 3 года, его мне принес «Дед Мороз» - как сейчас помню, это была машинка скорой помощи. Конструктор настолько мне понравился, что уже через пару дней, я уговорил родителей еще на один набор.

Тот самый первый Lego набор
Тот самый первый Lego набор

Электрификация

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

Уже лет в 5 я обзавелся своим первым Lego Technic набором - это был простенький «Драгстер», но на его примере я понял, что «мир шестеренок» намного интереснее чем «мир кубиков».

Первый Lego Technic набор
Первый Lego Technic набор

Мне очень нравилось собирать различные механизмы конвейерного типа, которые бы доставляли что либо из точку A в точку B всевозможными способами. Ввиду того, что наборы Lego c электроникой мне были недоступны из-за большой цены, я начал автоматизировать созданные конвейеры моторчиками из китайских машинок, которые управлялись по проводу. Ниже представлены примеры конвейеров в Lego (моим, конечно, было далеко до таких).

Далее меня завлекли попытки «воссоздать» Lego наборы на радиоуправлении: я потрошил все те же китайские машинки с целью подружить их «начинку» с ходовой частью сделанной из Lego - клей «жидкие гвозди» идеально подходил для этих целей. Конечно же, о красоте таких моделей речи и не шло, но вот основные игровые функции повторять удавалось, а радость от изобретения «своего велосипеда» из подручных средств вспоминается до сих пор.

Набор Lego 8366: Supersonic RC
Набор Lego 8366: Supersonic RC

Привет, жестокий мир электроники

С каждым годом «конкурировать» с Lego становилось все сложнее и сложнее, последние каплей стало появление Mindstorms (если быть точнее модель 9797 NXT 1.0) - чудо, а не набор, позволяющий программировать поведение модели на основе сигналов, приходящих с разнообразных датчиков, начиная от сенсора касания, заканчивая датчиком по распознаванию цветов.

Набор Lego Mindstorms
Набор Lego Mindstorms

С этого момента «гонка вооружений» вышла на новый уровень: по какому-то случайному стечению обстоятельств в наш класс перешел парнишка, который был помешан на электронике - я конечно же сразу напросился ему в подмастерье. Под его началом я сделал примитивного робота, который получал сигналы с фототранзисторов и преобразовывал их в движение с помощью микросхемы (драйвера двигателей) L293D, иными словами - робот двигался на свет. Все это дело идеально подружилось с ходовой из Lego с помощью все тех же «жидких гвоздей».

Схема того самого первого робота (сайт до сих пор жив)
Схема того самого первого робота (сайт до сих пор жив)

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

Не сказать что данные этапы дались мне легко, но что-то да получилось.

___________________________________________________________________________

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

В качестве микроконтроллера использовалась Atmega8, а в роли языка программирования выступал BASCOM (basic для «железок»). Отдельно стоит упомянуть про программатор: после всех перечисленных  мучений шагов необходимо было собрать устройство для закачки программы с ПК на микроконтроллер (в то время никаких Arduino и Raspberry Pi не существовало, которые можно было бы просто воткнуть в комп). И опять таки Lego послужило в качестве ходовой для робота, а с помощью чего все было соединено догадайтесь сами.

Результат превзошел все мои ожидания - мне настолько понравился сам процесс, а главное понимание того, что с помощью «ноликов и единичек» можно «захватить мир». На данном этапе жизни я попрощался с Lego и углубился в изучение «железок», хотя детская мечта о легендарном наборе Lego 8880 все еще жива и канал о Lego Technic я регулярно просматриваю.

Набор Lego 8880
Набор Lego 8880

Выбор специальности

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

Однако, случай опять вмешался в мою жизнь и почему-то при поступлении в университет, вместо направления, связанного только с «железками» (ИВТ), я выбрал направление на стыке уже упомянутых «железок» и прикладного программирования (РИС) - автоматизированные системы управления (АСУ). Я отчетливо помню, тот бланк для заполнения, но совершенно не помню, почему «галочку» поставил напротив АСУ. Что же, «Ставки сделаны. Ставок больше нет».

C# one love

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

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

В те годы я многое перепробовал: С++, Qt, Java, C#, Python, JavaScript, PHP и т.д. Удалось поработать Web-разрабом, создавая сайты различных фирм (PHP, MySql, JavaScript, HTML, CSS), были попытки разработки Android-приложения (Java), занятия научной деятельностью на кафедре (тоже на Java), работа летом над WinPhone приложением для отображения транспортных маршрутов (C#), какая-то «шабашка», растянувшаяся на пару лет с тем самым школьным другом, по разработке электронного документооборота (C#, WPF). Перечислять можно долго - всего уже и не вспомнишь.

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

Как вы уже поняли, «железки» я отложил в сторону, хотя были эксперименты с Arduino но, по большей части они были направлены на  получение «автоматов». Точно помню проект для местной научной конференции - «Автоматическая система полива растений», сделанный с помощью Arduino, датчика влажности почвы и автомобильного насоса для подачи омывайки. Этой поделкой даже заинтересовался какой-то «коммерсант», но потом «слился» ссылаясь на то, что не смог раздобыть грант на разработку. К слову, увлечение электроникой живо по сей день, однако в несколько иной форме: перешел на Raspberry - выступает в качестве «машинки» для обкатки новых технологий и даже в качестве сервера для демонстрации на хакатонах.

Cтраница из «Пиши, сокращай», заставившая меня улыбнуться, поскольку я прошел через все указанные этапы
Cтраница из «Пиши, сокращай», заставившая меня улыбнуться, поскольку я прошел через все указанные этапы

Возвращаясь к идеальному языку, я остановился на C#:

  • в нем было куча всего готового «из коробки»

  • его с головой хватало для решения всех универских задач

  • winPhone тогда был на пике своей популярности

  • разработка на одном языке под мобилки, десктоп и веб - кружила голову

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

Знакомство с Unity (и с GameDev’ом в частности)

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

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

В упомянутой компании, я застал переход с WinForms на WPF, до этого вообще использовался Delphi (в исходники на котором пришлось даже пару раз залезать). С моим участием было сделано пара коробочных продуктов, которые поехали покорять «необъятную». Все складывалось как нельзя лучше - работы много, работа интересная. Поскольку, разрабатываемые программы были направлены по большей части на взаимодействие с детьми, то с каждым новым продуктом, требования к контенту, призванному завлекать и погружать ребенка в процесс обучения, становились все сложнее и сложнее. Догадливый читатель уже сообразил, что дело двигалось к геймификации, а продукты плавно начали носить характер Exergaming’а.

WPF хватало для реализации «простеньких упражнений» с уже упомянутой геймификацией (заметьте, что я намеренно не употребляю термин «игра»). Но создав пару «заданий», в которых, например, требовалось в зависимости от пользовательских действий анимировать движение конвейерной ленты (привет, флэшбеки из детства с Lego-конвейерами), стало понятно, что далеко мы так не уедем, поскольку XAML это немножко про другое. Решение было простое и очевидное - начинаем плавный переезд на Unity. Часть проектов заканчиваем на WPF, а в часть, уже существующих, интегрируем отдельные красочные Unity-«задания», для реализации которых был нанят отдельный человек с соответствующими компетенциями. В обозримом будущем планировалось использовать WPF для «обертки» и «простеньких упражнений», Unity - для всего остального. Вариант мягко говоря интересный, про техническую реализацию которого можно написать отдельную статью, но к сожалению NDA. Однако, такой расклад меня вполне устроил - мою работу у меня не забирают, на Unity пересаживаться не заставляют (пока что).

С новым коллегой (который Unity разраб) мы быстро подружились и он активно начал меня просвящать. С его подачи я начал активно играть и интересоваться новостями игровой индустрии. Смотрел на его наработки и иногда расспрашивал, как реализована та или иная «игровая» механика, но не более.

Как-то раз, когда вся WPF-разработка на очередном проекте подошла к концу, чтобы не простаивать, мне предложили реализовать «простенькое упражнение» на Unity, суть которого сводилась к следующему: пользователь, с помощью стабилоплатформы, управляя «шариком» должен продержаться в указанной области определенное кол-во времени. Предусматривалось множество уровней сложности, в которых менялось бы время нахождения в области, размеры самой области, появлялись «противники», которые мешали пользователю, «толкая» его и т.д.

Далось мне такое задание нелегко - реализовал за месяц. Было тяжело перестроиться с привычного объектно-ориентированного подхода, непонятны были корутины, само понятие «навешивания» скриптов на объекты и многое другое. Но результат мне понравился и даже используется до сих пор. Забегая наперед, через пару лет, когда приложение потребовалось перевести на Multi-language, я переписал данную «игру» всего за пару дней.

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

Дальше наше с Unity общение становилось только плотнее: были pet-проекты, game jam’ы и много чего еще, что в конечном итоге и привело меня в разработку мобильных игр.

Вместо заключения

Вот таким получилось приключение «От Lego до GameDev'а». Наверное, этот рассказ я больше писал для себя, чтобы объяснить, как очутился там, где очутился. Мне было интересно проследить, как одно увлечение плавно перетекало в другое, хотя без случайностей конечно же не обошлось. Кто знает, куда этот путь заведет меня дальше, а пока я точно знаю одно: Lego - лучший подарок, поэтому на детских праздниках без него я не появляюсь.

P.S. Хочу сказать огромное спасибо всем тем, кто повстречался мне в жизни.

Комментарии (1)


  1. SherAlex
    22.02.2022 15:16
    +2

    Автор красава!

    Цепочка событий, которая привела автора в то состояние, которое описывается в конце статьи, мне кажется вполне естественной )

    Я нашёл некоторые схожести со своим путём. Правда игры мне нравились всегда и играл я много.