Девять месяцев назад у меня начался 2 курс университетской жизни: занимался спортом, учился, но не было никакой работы или большого увлечения, за которыми я бы проводил много времени, разве что видео игры.
Но спустя пару месяцев узнал, что у нас на кафедре работают ребята над созданием своих собственных игр. Я был заинтересован, ведь это было круто, наплыло сразу столько вопросов и идей в голове: «Как они это делают? А я ведь и сам хотел бы сделать свою игру. Как работает команда при создании игры? Как поддерживать атмосферу?» и т.д.
Когда посмотрел на то, что они уже сделали, не думая, написал одному из ребят в социальной сети, он был преподавателем по программированию, поэтому я был с ним знаком. Я долго ждал ответа и дождался, мы около часа разговаривали: заваливал его интересующими меня вопросами, а он охотно на них отвечал, это чувствовалось. Наконец я сказал: «Я ХОЧУ ДЕЛАТЬ ИГРЫ С ВАМИ! Возьмёте меня к себе? Я умею программировать!», на что он сказал, что они подумают с командой и примут решение. Не прошло и двух дней, как мне сказали: «Мы берём тебя!», я был очень доволен.
И вот уже через несколько дней мы все собираемся в уютной кафешке в центре города для того, чтобы обсудить план своих действий, текущие наработки и идеи. Я с увлечением смотрел на то, как они все обсуждают, показывают рисунки различных прототипов – все это было для меня новым и очень увлекательным. Мы решили, что будем работать на новом для нас игровом движке Unity3D, потому что он мультиплатформенный и постоянно растёт функционально. Решение было вполне аргументировано, ребята ранее работали с множеством других аналогов и даже писали свой движок на основе XNA. Мне ничего не оставалось, как согласиться.
Долгое время пришлось осваивать базовые функции и операции в Unity. Но постепенно все встало на свои места и начались получаться первые наработки.
Изначально я научился создавать 3D-местности: задаёшь размеры для плоскости, а затем на ней вырисовываешь различными кисточками горы и впадины. Можно создать очень реалистичный рельеф, затем наносишь текстуры, создаёшь воду, небо, солнце, и твой маленький виртуальный мир готов. Сначала я не мог поверить, что все так просто. Постепенно круг моих задач рос: работа с камерами, создание управления…
Очень нравилось то, что в команде была дружеская атмосфера, в которой была возможность легко обсуждать различные вопросы, принимать решения, вводить коррективы и просто общаться, несмотря на то, что я с ребятами был совсем не знаком ранее.
Но, в конце концов, мы пришли к тому, что игра потребует очень много времени, сил и средств, поэтому мы решили «заморозить» текущий проект игры и начали думать над созданием новой, более «реальной» для нашего текущего уровня в разработке.
Ну вот что у нас получилось:


Для реализации новой игры с кодовым названием «Искра» мы решили пополнить свой состав ещё двумя замечательными ребятами, на этом процесс формирования команды был закончен, и выглядела команда примерно так:
• Руководитель проекта, видеоредактор и мастер анимации;
• Художник со своей непередаваемой манерой работы с графикой;
• Разработчик пользовательского интерфейса и social network, собственно я;
• Программист игровой логики, у нас его называют «Программист от Бога»;
• 3D-моделер, с потрясающим опытом в данной области.
На дворе был холодный январь 2014 года, и наша команда начала свой новый нелёгкий путь по реализации своей задумки. Мы старались как можно чаще собираться вместе, в основном мы работали на кафедре нашего университета, там было хорошее помещение, плюс за это не приходилось платить, что было для нас идеально. Процесс создания игры был и интересным, и очень тяжёлым, так как приходилось осваивать новые дополнительные программы и различные функции игрового движка, что давалось очень тяжело в первое время, но потом это превращалось в увлекательное создание того, что было задумано, и у нас стало все получаться. Мы чувствовали то, как наша скорость написания игры растёт, мы не успевали придумывать что-то новое, как реализация уже давала о себе знать. В такой хорошей атмосфере мы проработали примерно 2 месяца, мы закончили demo-игру c одним полноценным уровнем – исследовательской локацией, мы были очень довольны и не думали останавливаться. Очень запомнилось то как писал пользовательский интерфейс для клавиатуры и джойстика под NGUI. Я пришел к крайне оригинальному и «идеальному» решению: для каждой кнопки я создавал 3 спрайтовых состояния (нормальное, наведенное, нажатое), между которыми происходило переключение при определенных нажатиях клавиш, также каждая кнопка несла в себе определенную функцию, что логично — самое главное, что все это работает прекрасно.
С данной игрой мы решили попробовать поучаствовать в конкурсах GamesJamKanobu и ImagineCup.
Участвуя в GamesJamKanobu, мы хотели показать наше творение людям, получить качественный feedback от игроков и гуру игровой индустрии, и продолжить параллельно разработку с корректировками багов и внесением пожеланий в игру. Почти каждый день мы делали новый build для нашего сайта, где любой желающий мог поиграть в неё и также поделиться своим мнением. В итоге мы заняли 3 место в номинации «Рабочая версия», чем были удивлены, ведь на конкурс было подано почти 500 игр и все они были по-своему прекрасны.
После такой замечательной победы мы добавили ещё один уровень – runner, вдохновение мы черпали из таких игр, как Raymond Legends, Audio Surf и Guitar Hero. И вновь у нас получилось то, что мы хотели и на этот раз: уровень был собран за 2 недели, что было для нас показателем роста.
Уже с новой demo пошли на ImagineCup, к которому мы готовились очень серьёзно, мы даже купили командную форму: брюки, рубашка и жилетка с фирменной нашивкой, которую мы сами сделали. Теперь по нам было видно, что мы команда, это было бы понятно даже в толпе. На кураже мы выиграли региональный финал, где был получен очень значительный опыт в выступлении и замечательные рекомендации от судей. Следующим шагом была подготовка и поездка в Москву на Российский Финал, на этот раз мы решили сконцентрировать своё внимание на содержании и подаче презентации, что нам удалось. На финале мы привлекли большое количество наших потенциальных игроков, которым очень понравилась наша игра, особенно уровень с «виртуальной реальность» с использованием OculusRift. По решению судей мы заняли первое место в номинации «Игры». Победа открыла нам ещё несколько потенциальных возможностей, над реализацией которых мы сейчас работаем.
На этом моя небольшая история заканчивается ввиду отсутствия новых событий и информации.
Эта статья написана для начинающих разработчиков, как мы, с целью мотивации, поднятия духа. За полгода я увидел множество хороших проектов — потенциальных startup'ов, которые были брошены своими хозяевами в виду различных причин. Ребята, не бросайте свои проекты — они уникальны, и ваша задача довести их до логического конца.
Спасибо за прочтение.
Удачи.
Но спустя пару месяцев узнал, что у нас на кафедре работают ребята над созданием своих собственных игр. Я был заинтересован, ведь это было круто, наплыло сразу столько вопросов и идей в голове: «Как они это делают? А я ведь и сам хотел бы сделать свою игру. Как работает команда при создании игры? Как поддерживать атмосферу?» и т.д.
Когда посмотрел на то, что они уже сделали, не думая, написал одному из ребят в социальной сети, он был преподавателем по программированию, поэтому я был с ним знаком. Я долго ждал ответа и дождался, мы около часа разговаривали: заваливал его интересующими меня вопросами, а он охотно на них отвечал, это чувствовалось. Наконец я сказал: «Я ХОЧУ ДЕЛАТЬ ИГРЫ С ВАМИ! Возьмёте меня к себе? Я умею программировать!», на что он сказал, что они подумают с командой и примут решение. Не прошло и двух дней, как мне сказали: «Мы берём тебя!», я был очень доволен.
И вот уже через несколько дней мы все собираемся в уютной кафешке в центре города для того, чтобы обсудить план своих действий, текущие наработки и идеи. Я с увлечением смотрел на то, как они все обсуждают, показывают рисунки различных прототипов – все это было для меня новым и очень увлекательным. Мы решили, что будем работать на новом для нас игровом движке Unity3D, потому что он мультиплатформенный и постоянно растёт функционально. Решение было вполне аргументировано, ребята ранее работали с множеством других аналогов и даже писали свой движок на основе XNA. Мне ничего не оставалось, как согласиться.
Долгое время пришлось осваивать базовые функции и операции в Unity. Но постепенно все встало на свои места и начались получаться первые наработки.
Изначально я научился создавать 3D-местности: задаёшь размеры для плоскости, а затем на ней вырисовываешь различными кисточками горы и впадины. Можно создать очень реалистичный рельеф, затем наносишь текстуры, создаёшь воду, небо, солнце, и твой маленький виртуальный мир готов. Сначала я не мог поверить, что все так просто. Постепенно круг моих задач рос: работа с камерами, создание управления…
Очень нравилось то, что в команде была дружеская атмосфера, в которой была возможность легко обсуждать различные вопросы, принимать решения, вводить коррективы и просто общаться, несмотря на то, что я с ребятами был совсем не знаком ранее.
Но, в конце концов, мы пришли к тому, что игра потребует очень много времени, сил и средств, поэтому мы решили «заморозить» текущий проект игры и начали думать над созданием новой, более «реальной» для нашего текущего уровня в разработке.
Ну вот что у нас получилось:


Для реализации новой игры с кодовым названием «Искра» мы решили пополнить свой состав ещё двумя замечательными ребятами, на этом процесс формирования команды был закончен, и выглядела команда примерно так:
• Руководитель проекта, видеоредактор и мастер анимации;
• Художник со своей непередаваемой манерой работы с графикой;
• Разработчик пользовательского интерфейса и social network, собственно я;
• Программист игровой логики, у нас его называют «Программист от Бога»;
• 3D-моделер, с потрясающим опытом в данной области.
На дворе был холодный январь 2014 года, и наша команда начала свой новый нелёгкий путь по реализации своей задумки. Мы старались как можно чаще собираться вместе, в основном мы работали на кафедре нашего университета, там было хорошее помещение, плюс за это не приходилось платить, что было для нас идеально. Процесс создания игры был и интересным, и очень тяжёлым, так как приходилось осваивать новые дополнительные программы и различные функции игрового движка, что давалось очень тяжело в первое время, но потом это превращалось в увлекательное создание того, что было задумано, и у нас стало все получаться. Мы чувствовали то, как наша скорость написания игры растёт, мы не успевали придумывать что-то новое, как реализация уже давала о себе знать. В такой хорошей атмосфере мы проработали примерно 2 месяца, мы закончили demo-игру c одним полноценным уровнем – исследовательской локацией, мы были очень довольны и не думали останавливаться. Очень запомнилось то как писал пользовательский интерфейс для клавиатуры и джойстика под NGUI. Я пришел к крайне оригинальному и «идеальному» решению: для каждой кнопки я создавал 3 спрайтовых состояния (нормальное, наведенное, нажатое), между которыми происходило переключение при определенных нажатиях клавиш, также каждая кнопка несла в себе определенную функцию, что логично — самое главное, что все это работает прекрасно.
Код GUI (только для клавиатуры):
void Start ()
{
//Стартовая активность панелей между которыми происходит переключение (пауза-продолжить)
buttonInputMenu.SetActive (true);
buttonsMapMenu.SetActive (false);
//Счетчик текущего меню ставим на 1 (InputMenu)
int currentMenu = 1;
//Счетчик текущей активной кнопки
int currentButton = 1;
}
void Update ()
{
//Действия при отпускании клавиши Esc, когда активно InputMenu
if(Input.GetKeyUp(KeyCode.Escape) && currentMenu == 1)
{
//Переключение состояний кнопок
buttonMenuNormal.SetActive (true);
buttonMenuHover.SetActive (false);
buttonMenuClick.SetActive (false);
buttonContinueNormal.SetActive (false);
buttonContinueHover.SetActive (true);
buttonContinueClick.SetActive (false);
//Переключение InputMenu на MapMenu
buttonInputMenu.SetActive (false);
buttonsMapMenu.SetActive (true);
//Переключение счетчика, который содержит инфорамция о том какая панель меню активна в данный момент
currentMenu = 2;
}
//Действия при отпускании клавиши Esc, когда активно MapMenu
else if(Input.GetKeyUp(KeyCode.Escape) && currentMenu == 2)
{
//Переключение панели MapMenu на InputMenu
buttonInputMenu.SetActive (true);
buttonsMapMenu.SetActive (false);
//Переключение счетчика текущего меню
currentMenu = 1;
}
//Действие при нажатии клавишы ESC, когда активно InputMenu
if(Input.GetKeyDown(KeyCode.Escape) && currentMenu == 1)
{
//Переключение состояний клавиш, происходит эффект анимации
buttonMenuNormal.SetActive (false);
buttonMenuHover.SetActive (false);
buttonMenuClick.SetActive (true);
}
//Обработка переключений кнопок в MapMenu
if(currentMenu == 2)
{
//При нажатии стрелки вниз
if(Input.GetKeyDown(KeyCode.DownArrow) && currentButton == 1)
{
//Переключение состояний
buttonContinueNormal.SetActive (true);
buttonContinueHover.SetActive (false);
buttonContinueClick.SetActive (false);
buttonBackMainMenuNormal.SetActive (false);
buttonBackMainMenuHover.SetActive (true);
buttonBackMainMenuClick.SetActive (false);
//Переключение счетчика текущей кнопки
currentButton = 2;
}
//При нажатии стрелки вверх
if(Input.GetKeyDown(KeyCode.UpArrow) && currentButton == 2)
{
//Переключение состояний кнопок
buttonContinueNormal.SetActive (false);
buttonContinueHover.SetActive (true);
buttonContinueClick.SetActive (false);
buttonBackMainMenuNormal.SetActive (true);
buttonBackMainMenuHover.SetActive (false);
buttonBackMainMenuClick.SetActive (false);
//Переключение счетчика текущей кнопки
currentButton = 1;
}
}
//Обработка переключения и активности кнопок при нажатии Space
if(currentMenu == 2)
{
//При нажатии любой кнопки происходит ее анимация, за счет смены текущего состояния
//Также происходят действия Continue и MainMenu,при отпускании к нажатой клавишы
//
if(Input.GetKeyDown(KeyCode.Space) && currentButton == 1)
{
buttonContinueNormal.SetActive (false);
buttonContinueHover.SetActive (false);
buttonContinueClick.SetActive (true);
}
if(Input.GetKeyDown(KeyCode.Space) && currentButton == 2)
{
buttonBackMainMenuNormal.SetActive (false);
buttonBackMainMenuHover.SetActive (false);
buttonBackMainMenuClick.SetActive (true);
}
if(Input.GetKeyUp(KeyCode.Space) && currentButton == 1)
{
buttonContinueNormal.SetActive (true);
buttonContinueHover.SetActive (false);
buttonContinueClick.SetActive (false);
Continue ();
}
if(Input.GetKeyDown(KeyCode.Space) && currentButton == 2)
{
buttonBackMainMenuNormal.SetActive (true);
buttonBackMainMenuHover.SetActive (false);
buttonBackMainMenuClick.SetActive (false);
MainMenu();
}
}
С данной игрой мы решили попробовать поучаствовать в конкурсах GamesJamKanobu и ImagineCup.
Участвуя в GamesJamKanobu, мы хотели показать наше творение людям, получить качественный feedback от игроков и гуру игровой индустрии, и продолжить параллельно разработку с корректировками багов и внесением пожеланий в игру. Почти каждый день мы делали новый build для нашего сайта, где любой желающий мог поиграть в неё и также поделиться своим мнением. В итоге мы заняли 3 место в номинации «Рабочая версия», чем были удивлены, ведь на конкурс было подано почти 500 игр и все они были по-своему прекрасны.
Screenshot исследовательской локации:

После такой замечательной победы мы добавили ещё один уровень – runner, вдохновение мы черпали из таких игр, как Raymond Legends, Audio Surf и Guitar Hero. И вновь у нас получилось то, что мы хотели и на этот раз: уровень был собран за 2 недели, что было для нас показателем роста.
Screenshot скоростного-музыкального режима (Runner’а):

Уже с новой demo пошли на ImagineCup, к которому мы готовились очень серьёзно, мы даже купили командную форму: брюки, рубашка и жилетка с фирменной нашивкой, которую мы сами сделали. Теперь по нам было видно, что мы команда, это было бы понятно даже в толпе. На кураже мы выиграли региональный финал, где был получен очень значительный опыт в выступлении и замечательные рекомендации от судей. Следующим шагом была подготовка и поездка в Москву на Российский Финал, на этот раз мы решили сконцентрировать своё внимание на содержании и подаче презентации, что нам удалось. На финале мы привлекли большое количество наших потенциальных игроков, которым очень понравилась наша игра, особенно уровень с «виртуальной реальность» с использованием OculusRift. По решению судей мы заняли первое место в номинации «Игры». Победа открыла нам ещё несколько потенциальных возможностей, над реализацией которых мы сейчас работаем.
Общая фотография с Imagine CupRussia:

На этом моя небольшая история заканчивается ввиду отсутствия новых событий и информации.
Эта статья написана для начинающих разработчиков, как мы, с целью мотивации, поднятия духа. За полгода я увидел множество хороших проектов — потенциальных startup'ов, которые были брошены своими хозяевами в виду различных причин. Ребята, не бросайте свои проекты — они уникальны, и ваша задача довести их до логического конца.
Спасибо за прочтение.
Удачи.