Очень давно хотел поделиться своей историей о том, как очутился в GameDev’е, поскольку, никогда туда не стремился, но «имеем то, что имеем».
Отношение к играм в детстве
Я не из тех, кто с детства обожал видео игры и всю жизнь жил с мечтой стать их разработчиком. Хоть в детстве компьютер (Pentium II) и появился рано, лет в 5, особого интереса к играм у меня не возникло - играл, как и все, во что придется (что удастся раздобыть): Герои Меча и Магии III, Дальнобойщики 2, Half Life, Serious Sam, NFS Porsche Unleashed и т.д., одним словом - классика. Однако, все же одну игру я отмечу, которая больше всего запала в душу и про которую не многие знают - Re-Volt: гонки на всевозможных радиоуправляемых машинках с кучей трасс и разнообразным оружием начиная от ракет, заканчивая «капитошками».
Знакомство с Lego
Как вы, наверное, уже могли догадаться из названия статьи, все время в детстве, которое я мог бы потратить на видеоигры, я тратил на Lego - вот за это хочу сказать огромное спасибо моим родителям. Первый набор у меня появился в 3 года, его мне принес «Дед Мороз» - как сейчас помню, это была машинка скорой помощи. Конструктор настолько мне понравился, что уже через пару дней, я уговорил родителей еще на один набор.
Электрификация
С помощью Lego я научился читать инструкции, развил мелкую моторику, и образное мышление - согласитесь неплохой starter pack для разработчика, но обо всем по порядку.
Уже лет в 5 я обзавелся своим первым Lego Technic набором - это был простенький «Драгстер», но на его примере я понял, что «мир шестеренок» намного интереснее чем «мир кубиков».
Мне очень нравилось собирать различные механизмы конвейерного типа, которые бы доставляли что либо из точку A в точку B всевозможными способами. Ввиду того, что наборы Lego c электроникой мне были недоступны из-за большой цены, я начал автоматизировать созданные конвейеры моторчиками из китайских машинок, которые управлялись по проводу. Ниже представлены примеры конвейеров в Lego (моим, конечно, было далеко до таких).
Далее меня завлекли попытки «воссоздать» Lego наборы на радиоуправлении: я потрошил все те же китайские машинки с целью подружить их «начинку» с ходовой частью сделанной из Lego - клей «жидкие гвозди» идеально подходил для этих целей. Конечно же, о красоте таких моделей речи и не шло, но вот основные игровые функции повторять удавалось, а радость от изобретения «своего велосипеда» из подручных средств вспоминается до сих пор.
Привет, жестокий мир электроники
С каждым годом «конкурировать» с Lego становилось все сложнее и сложнее, последние каплей стало появление Mindstorms (если быть точнее модель 9797 NXT 1.0) - чудо, а не набор, позволяющий программировать поведение модели на основе сигналов, приходящих с разнообразных датчиков, начиная от сенсора касания, заканчивая датчиком по распознаванию цветов.
С этого момента «гонка вооружений» вышла на новый уровень: по какому-то случайному стечению обстоятельств в наш класс перешел парнишка, который был помешан на электронике - я конечно же сразу напросился ему в подмастерье. Под его началом я сделал примитивного робота, который получал сигналы с фототранзисторов и преобразовывал их в движение с помощью микросхемы (драйвера двигателей) L293D, иными словами - робот двигался на свет. Все это дело идеально подружилось с ходовой из Lego с помощью все тех же «жидких гвоздей».
Воодушевленный успехом, мои аппетиты заметно выросли и мне захотелось сделать что-нибудь посложнее: выбор пал на создание робота, который мог объезжать препятствия сначала с использованием обычных сенсоров касания (в простонародье кнопок), а затем и с использованием ИК-датчиков. Вот только было небольшое НО, чтобы претворить сие чудо в жизнь необходимо было научиться:
проектировать электронные схемы
изготавливать платы (привет, лазерно-утюжная технология)
паять
программировать микроконтроллеры
Не сказать что данные этапы дались мне легко, но что-то да получилось.
___________________________________________________________________________
Отдельное спасибо хочу сказать своему отцу, в прошлом он был радиолюбителем. Именно он научил меня держать паяльник, показал как травить платы, лудить дорожки и т.д.
___________________________________________________________________________
В качестве микроконтроллера использовалась Atmega8, а в роли языка программирования выступал BASCOM (basic для «железок»). Отдельно стоит упомянуть про программатор: после всех перечисленных мучений шагов необходимо было собрать устройство для закачки программы с ПК на микроконтроллер (в то время никаких Arduino и Raspberry Pi не существовало, которые можно было бы просто воткнуть в комп). И опять таки Lego послужило в качестве ходовой для робота, а с помощью чего все было соединено догадайтесь сами.
Результат превзошел все мои ожидания - мне настолько понравился сам процесс, а главное понимание того, что с помощью «ноликов и единичек» можно «захватить мир». На данном этапе жизни я попрощался с Lego и углубился в изучение «железок», хотя детская мечта о легендарном наборе Lego 8880 все еще жива и канал о Lego Technic я регулярно просматриваю.
Выбор специальности
В старших классах я заинтересовался умными домами: собирал отладочные платы и экспериментировал с 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#:
в нем было куча всего готового «из коробки»
его с головой хватало для решения всех универских задач
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. Хочу сказать огромное спасибо всем тем, кто повстречался мне в жизни.
SherAlex
Автор красава!
Цепочка событий, которая привела автора в то состояние, которое описывается в конце статьи, мне кажется вполне естественной )
Я нашёл некоторые схожести со своим путём. Правда игры мне нравились всегда и играл я много.