Pull to refresh

Tower Defense своими руками

Reading time 7 min
Views 105K
Доброго времени суток!

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

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

Еще раз напомнюсь, эта статья — лишь ощущения от знакомства с игростроем, и рассказ о своем небольшом опыте.

image

Так вот. Началось все довольно давно – в марте 2012 года. Именно тогда я впервые познакомился с игровым движком, а точнее с тем, что там можно делать. А как оказалось, делать можно все! Для этого «всего лишь» требуется какое-никакое знание языка программирования (JavaScript или C#). И вот тут то я и встрял — до этого я ни разу в жизни не программировал (редактор Warcraft III с его триггерами и Thinking Particles не в счет — здесь совсем другой уровень), даже в школе никогда не было уроков по программированию. Хотя, были, кажется Pascal или что-то подобное, но было это так давно и неправда, что все знания с тех времен улетучились без остатка. Пришлось лезть в интернет за обучающими статьями и видео-уроками. Первый же попавшийся урок каждые 5 минут напоминал смотреть официальную справку по скриптописанию, и это правило мне очень и очень помогло в дальнейшем. Еще полным шоком для меня была необходимость писать несколько строк скрипта для совсем уж элементарной вещи — выхода из игры через Esc.

В итоге, как оказалось, программировать не так уж и сложно. Главное понимать логику программы и языка программирования (кстати, мой выбор пал на C#. Он мне показался более понятным и гибким). Мои первые поделки не отличались особой уникальностью — где-то побегать, что-то осмотреть, куда-нибудь нажать. Раз за разом я чувствовал себя все лучше и лучше в написании скриптов, и в какой-то момент все настолько стало «родным», что я практически без запинок и ошибок писал один скрипт за другим. И вот тут я загорелся идеей сделать что-то грандиозное! Для начала достаточно небольшое, но с богатым функционалом — так родился проект, на который я потратил полтора месяца, четыре недели из которых я был занят написанием скриптов! Вот это было действительно классно — однако я понимал, что этого мало. Да, я смог реализовать смену дня и ночи, переключение камер, множество различных режимов «игры» и некоторые другие фишки. Но весь функционал был завязан лишь на использовании различных компонентов в редакторе, да и только. Именно тогда родилась идея создания полноценной игры.

Идея (тип) игры определилась моментально — это будет игра типа Tower Defense. Да, конечно не шибко оригинально, однако настоящих и полноценных TD игр (да еще и в 3D!) практически нет. Первые недели разработки ушли на создание базовой механики игры, которая впоследствии не раз менялась.

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

image

Прикинув в голове, какие мне потребуются возможности у башни, я принялся писать скрипты. Сначала был написаны два скрипта — первый позволял мобу (противнику) иметь какое-то определенное здоровье и краснеть по мере его уменьшения, а второй как раз отвечал за выстрелы у башни. Все бы ничего, но вот уж очень глупо смотрелось то, как башня наносит урон мобу, а снаряд до него еще не долетел. Пришлось править… и в последствии не раз возвращаться к скрипту атаки для его модернизации. Но какая TD без возможности установки собственной башни? Еще один скрипт, и мы можем ставить башню в указанном мышкой месте. Через пару дней игра приняла вид скриншота выше, и настала пора заняться более детальной проработкой игры.

И первое что было в списке задач — заставить мобов идти по заранее заданному пути. Раньше я с этим ни разу не сталкивался и с этой задачей мне пришлось провозиться с пол дня, пока не вспомнил про Pathfinding. Вот теперь то игра заиграла новыми красками! С горящими счастьем глазами я наблюдал за тем, как мои кубики бежали по новой карте, точнее по дорожке новой карты! Но тут то и появились первые косяки с башней — она была просто не в состоянии попасть по далеко бегущему мобу, да еще и в прицел она брала только самую ближнюю к себе цель. Пришлось менять скрипты… вводить второй массив и делать выборку по самым дальним, но в то же время в радиусе действия башни, целям. Порадовавшись правильной работе скрипта, пришлось вернуться к проблеме, когда башни просто не попадали по слишком далеким целям. Вот тут то и пригодилась школьная геометрия :) Да, теперь на один вселенский вопрос меньше — математика с геометрией нашла свое место в жизни. Повозившись с синусами, косинусами, несколькими переменными и введя галочку «стрелять на упреждение», башни таки начали успешно попадать по целям, где бы они ни находились! И для этого не потребовалось никакой «автонаводки» — снаряды летели по прямой до цели и поражали ее! К этому моменту игра приобрела достаточно красивый внешний вид и в нее наконец таки можно было поиграть, хотя и всего 5 минут.

image

Но… чего-то не хватает. Очень не хватает. Игре не хватало глубины – монотонный отстрел мобов не шибко интересовал игроков. Тут начали появляться первые задумки уже глобальной игры…

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

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

До середины зимы 2013 года, я старался сделать работающую игру со всеми наворотами, что придумал. Даже анонсировал закрытое бета тестирование, на которое подписались 20 человек. Разработка шла своим чередом, пришлось по пути научиться работе с MySQL + PHP. Долго было, сложно было. Еще одним камнем на пути стал VK.API. Ох, сколько времени было потрачено на понимание принципов его работы… напомню, программированием я на тот момент занимался всего меньше года, и опыта было еще не так много, чтобы с ходу понимать написанное в справке. Тем не менее, хоть и с опозданием, игра вышла на стадию ЗБТ, и люди впервые смогли в нее сыграть.

Очевидно, что первый блин вышел комом. Куча багов, неочевидные (но для меня то они были очевидными, ведь я все это делал) возможности, отсутствие обучения и внятного понимания происходящего, заставило меня понервничать – игроки были не рады, хотя сама игра им нравилась. Разработка шла своим чередом, тестеры отчитываются о найденных багах, некоторые из багов оперативно правились, другие — ставились в «очередь». В то время я впервые почувствовал себя разработчиком – без участия тестеров, было некое неудовлетворение тем, что я делал.

image

Но дальше становилось только веселее. Анонс ОБТ и слепое видение «законченности» игры. Авральный темп работы над проектом, порой спать ложился только в 3-4 часа ночи (занимался игрой в свободное время). Но тем не менее, были доработаны многие важные фишки проекта – редактирование деревни, постройка зданий, рынок, и много чего еще. Добавил в игру 4 игровых уровня, теперь хотя бы было во что поиграть.

image

В свой день рождения я решил открыть доступ к игре всем желающим и посмотреть на отзывы. В тот момент было «готово» порядка 70% ядра игры, и действительно можно было допустить людей к тестированию.

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

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

Концепция не кардинально, но поменялась. На основе проведенного тестирования были выявлены слабые стороны проекта. И один из самых очевидных – отсутствие «автивного» геймлея. Игроки просто приходили в игру, запускали уровень и ставили везде, где только можно было, башни. Потом уходили на несколько минут от компа, а по возвращению их ждал пройденный уровень и награда. Нужно было что-то менять…
Опять размышления, обдумывание ситуации. Также многие жаловались на убогость интерфейса (признаюсь, он действительно выглядел убого), и нужно было срочно принимать меры.

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

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

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

2) После составления дизайн-документа, подумайте о всех возможных модельках в игре. Составьте четкий план по моделированию – что нужно прежде всего, а что может и подождать. Четкий план всегда поможет сориентироваться, когда теряется нить разработки.

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

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

image

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

Также очень рекомендую для плавности действий использовать интерполяцию. В Unity3D практически любые переменные можно интерполировать между друг дружкой (Mathf.Lerp(), Vector3.Lerp(), Color.Lerp() и т.п.), что позволяет в несколько строк преобразить интерфейс, или различные движения в игре. Честно говоря, это также стало одним из откровений во время разработки.

image

Ну и последняя мысль: геймдев это сложно. Это не радужное придумывание «зомби апокалипсиса с открытым миром, World-PvP и ограблением караванов», это реально тяжелое занятие, особенно для одиночки. Нужно очень многое уметь (программирование, моделинг, анимация, владение фотошопом, знание постэффектов, шейдеров, инструментария ПО, умение создавать музыку, красивый голос для озвучки и многое другое), чтобы в одиночку завершить сложный проект. Потому я сейчас пытаюсь привлечь небольшую сумму на отечественном бумстартере – уж очень мне не хватает композитора, звукаря и переводчика. Мало кого интересуют браузерные игры, и не думаю что мне получится собрать нужную сумму. Кстати, игру то я первым делом запущу на фэйсбуке, и с ним так же будет много проблем. Говорят, без дорогого пиара там будет очень тяжело.

Спасибо Вам за внимание, надеюсь, статья вам понравилась и быть может, вы возьмете на заметку некоторые из моих мыслей.
Tags:
Hubs:
+104
Comments 55
Comments Comments 55

Articles