Изучение Unity в Big Red Hacks

В прошлые выходные я посетил Big Red Hacks (16–18 сентября) в Корнельском университете и вместе со своей командой получил награду в области дизайна UI/UX за создание игры на тему переработки. Темой хакатона в этом году была устойчивость. Обычно мне нравится создавать игры, поскольку заявки на участие в хакатонах и «социально полезные» хакатоны — не самое лучшее место для этого. Призовые категории и тот факт, что спонсоры хотят, чтобы вы использовали их API, затрудняют победу в уникальной игре, которая не вписывается ни в одну из категорий (что-то вроде общей проблемы MLH, но это обсуждение в другой раз).

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

Мы потратили немало времени на обдумывание идеи и, наконец, остановились на тематической игре, посвященной переработке, которая рассказывала бы пользователям о том, отправляются ли одноразовые предметы на переработку, в компост или на свалку. Изначально я хотел разработать многопользовательскую веб-игру с WebSockets и HTML5, но мы решили, что ее лучше развернуть как родное приложение для iOS или Android, и остановились на Unity. Однако меня это немного пугало, так как у меня не было опыта работы с Unity.

Я с трудом начал изучать Unity. Поскольку он был оптимизирован для Mac и Windows, я потратил около 20 минут, пытаясь найти самую последнюю версию Linux (у меня Ubuntu 16.04), а затем еще 45 минут, ожидая ее загрузки через дерьмовый гостевой Wi-Fi Cornell. Нихил очень помог мне, научив меня пользоваться интерфейсом и редактором Unity. На следующий день я просматривал документацию и смотрел все обучающие видео. Функция воспроизведения YouTube с удвоенной скоростью оказалась очень полезной, так как я мог быстро просматривать видео. Должен сказать, что документация Unity невероятно лаконична и хорошо сделана, уступая только документации Google Android.

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

while (game.isRunning()) {
  for (var player of players) {
    player.update();
  }
  for (var entity of entities) {
    entity.update();
  }
  // Miscellaneous update code
}

Обычно программирование игры с нуля вращается вокруг игрового цикла и написания в нем логики, включая ваш физический движок, графический рендерер и т. д. Часто вы сталкиваетесь с проблемами, когда игра становится более сложной, и логика этих различных частей становится связанной. в большой беспорядок (в таких случаях, как анимация). Unity позаботится обо всем этом за вас прекрасно интегрированным способом, разделив все части на Компоненты и Игровые объекты. Вместо того, чтобы писать жизненно важную логику в основном игровом цикле, вы записываете логику в сценарии C#, которые присоединяются в качестве компонентов к различным вашим игровым сущностям, которые сообщают им, как обновлять себя и как реагировать на различные игровые события. Однако эта парадигма программирования была очень похожа на обработчики событий в JavaScript, поэтому разобраться в ней было несложно.

Я думаю, что одна из самых безумных вещей, к которой нужно привыкнуть, это то, как плавно эти скрипты интегрируются в интерфейс Unity. Большая часть игрового дизайна и размещения объектов выполняется в представлении «Сцена», «Иерархия» и «Инспектор». Если сценариям требуется доступ к компоненту, чтобы получить к нему доступ или изменить его, все, что вам нужно сделать, это создать общедоступную переменную для компонента, а затем перетащить ее в сценарий из Инспектора. Эта концепция была БЕЗУМНОЙ для меня, и мне потребовалось некоторое время, чтобы обдумать ее. Больше никаких кошмаров с областью действия и ссылками на объекты, которые передаются как суставы.

Говоря о соединениях, просмотр обучающего видео Unity2D о физических соединениях был захватывающим:

Что меня больше всего впечатлило в физическом движке Unity, так это невероятный набор опций, которые можно использовать для настройки поведения объекта. Существует огромная коллекция компонентов Rigidbody, Collider и Effector, которые вы можете прикрепить к игровым объектам, чтобы влиять на то, как они падают, отскакивают, скользят, ломаются, вращаются и т. д. Объяснение их особенностей займет до Рождества, но все они невероятно просты в использовании, и вы можете изменять их на лету во время игры, чтобы увидеть, как они повлияют на игровой процесс.

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

В итоге мы получили за это награду за дизайн UI/UX, и, насколько я знаю, они присылают нам полароидные снимки в качестве призов.

Во время этого лихорадочного 36-часового хакатона Unity определенно впечатлила меня настолько, насколько поставила в тупик. Это определенно заслужило место в моем списке TODO как предмет для изучения и дальнейшего изучения. Поскольку мои друзья выразили заинтересованность в том, чтобы я перенес свои приложения для Android на iOS, я, вероятно, буду переделывать их в Unity и развертывать для iOS. (Кстати, если вы играете в Bouncy Square, мой новый рекорд — 135).

На этом, пожалуй, все, спасибо за прочтение!

Подписывайтесь на меня в Твиттере @omgimanerd!

РЕДАКТИРОВАТЬ: Если вам интересно посмотреть исходный код проекта, вы можете найти его на GitHub здесь.