Как я создаю 3D-игру в прямом эфире со своими подписчиками. И почему.
В конце прошлого года я загорелся идеей создания своей игры. Тогда я не просто не был программистом, но даже не имел никакого отношения к программированию в принципе, получив вполне себе гуманитарное высшее образование. Но я давно являюсь поклонником игр жанра "survival", а так же - пиратской тематики. И вот именно тогда я осознал, что полноценной игры на стыке этих двух понятий до сих пор не существует. Тогда то и было решено делать свою игру, с преферансом и куртизанками.
Несколько первых месяцев процесс шел очень тяжко, так как базы не было вообще никакой. И начал я с подбора движка для своей будущей игры. Мне сейчас часто задают вопрос, почему был выбран именно Unity, так что отвечу сразу здесь и сейчас: я рассматривал три основных движка для создания 3D-игр - Unity 3D, Unreal Engine, CryEngine; третий у меня просто отказался работать, второй мне показался чрезмерно усложненным (C++ и blueprints плюс не слишком большое количество справочной информации на русском языке), а вот Юнити, тот самый великий и ужасный Unity, у меня заработал, язык C# не вызвал отторжения на подсознательном уровне, а количество информации на русском языке (а некоторое время спустя я открыл для себя еще более значительное ее количество на английском) оказалось более чем внушительным.
Определившись с движком и языком программирования, я начал изучать базовые основы. Я подписался на несколько YouTube-каналов с уроками по Unity и C#, перечитал несколько кратких курсов по C# для того, чтобы хотя бы начать понимать закономерности, и постепенно начал хотя бы немного разбираться в выбранной тематике.
Сейчас, наряду с вопросом о том, почему я выбрал Unity, мне часто задают и другой: как я стал программистом? На самом деле, я пока еще далек от мысли считать себя программистом. Я учусь. Активно учусь. И ежедневные стримы (по 4-6 часов каждый день, с редкими выходными) по игроразработке на моем YouTube-канале - лучший способ получить необходимую практику.
Первое время я очень сильно увлекся темой Unity + C#, тайминг стримов, бывало, доходил до 9 часов непрерывного "чего-то-делания", неудивительно, что однажды я перегорел и на некоторое время отошел от разработки, переключившись на банальные летсплеи. Но прошло не так много времени и я начал ощущать, что чего-то в моей жизни не хватает. И скоро понял, что не хватает мне именно капризного Unity, многочасового ковыряния в коде на шарпе, подсказок подписчиков и вообще удивительно теплой атмосферы стримов. И я вернулся, стримы по разработке снова начали выходить регулярно, число подписчиков снова пошло вверх, и что самое важное - среди них стало меньше школьников (интересовавшихся в первую очередь летсплеями), а вот серьезных дядек, тоже занимающихся игроразработкой или просто интересующихся тематикой стало значительно больше. И вместе с их количеством растет и моя мотивация довести начатое дело до конца.
На сегодняшний день число одновременных зрителей на стримах по игроразработке доходит до 50 человек, некоторые видео (например, с результатами дня или презентации каких-то значительных свершений) набирают по несколько тысяч просмотров, мою статью по игре опубликовали на Хабре, что тоже сильно подстегнуло мотивацию.
За прошедшие примерно 8 месяцев разработки игра наконец-то стала значительно ближе к играбельной альфа-версии. Изначально я планировал выпустить альфу к 200 серии стримов по разработке, но некоторое время назад решил что дедлайн, конечно, хорошо, но выпускать продукт, который меня чем-то не устраивает - идея не очень, потому альфа выйдет тогда, когда я посчитаю ее достойной выхода. Хотя и сильно затягивать с этим я тоже не буду.
Это все была такая большая прелюдия, теперь, думаю, можно больше сказать и о самой игре.
Игра The Island (рабочее название) это выживалка в пиратском сеттинге, симулятор пиратской жизни в 17 веке. Я стараюсь сделать именно симулятор жизни пиратов, настолько, насколько это будет возможно. А для этого мне приходится учитывать много специфических особенностей, которыми в других играх часто пренебрегают. Из недавнего, можно привести пример корабельной пушки (в пиратской игре не обойтись без корабельных пушек, верно же?): не смотря на то, что она была готова уже некоторое время назад, мы потратили на одном из стримов полтора часа на ее калибровку, чтобы она не просто стреляла куда-то, а чтобы можно было вести из нее физически корректную прицельную стрельбу. По итогу мы добились того, что с пушки стало возможно попасть в небольшую цель (дверь) за несколько сотен метров, а сама пушка тоже стала более физически продуманной (у нее есть ядро определенного веса, влияющего на дальность его полета, есть сила отдачи при выстреле, урон персонажу, попавшему под откат пушки после выстрела, персонаж может получить контузию с потерей ХП и звоном в ушах + временную дезориентацию в пространстве после выстрела из пушки, ядро взрывается в конечной точке и взрыв его обладает взрывной волной, влияющей на физические объекты вокруг, например - ту же дверь в доме можно вышибить как прямым попаданием ядра в нее, так и взрывной волной от взрыва ядра неподалеку).
И вот тем же принципам максимальной реалистичности я стараюсь следовать во всем. Взять, например, поведение бегемотов (история их появления на острове будет раскрыта в сюжете). Есть 2 типа бегемотов: взрослые и детеныши. И их поведение отличается (и пересекается): взрослые пасутся себе спокойно на карте, детеныши же следуют за взрослым. Детеныши не реагируют на персонажа, в отличие от взрослого бегемота, которому не понравится мельтешение игрока у него перед носом. Но если персонаж ударит детеныша, то это вызовет агрессию взрослого бегемота, который будет преследовать персонажа, пока не убьет (в отличие от ситуации, когда персонаж "сагрит" просто взрослого бегемота и тот потеряет к нему интерес через некоторое время, если не получится сразу уничтожить угрозу). В будущем я планирую еще реализовать такую вещь, как широко известную вражду бегемотов и крокодилов, а так же несколько менее известных паттернов поведения этих и других животных.
Думаю, не помешает осветить еще несколько вопросов, которые тоже периодически задают на стримах.
В игре будет сюжет?
Будет, в частности из него станет понятно, откуда на острове крупные животные.
В чем сюжет будет состоять?
Сюжет это только канва для происходящего на острове. Что есть сюжет нашей с вами жизни? Сюжет это то, как мы с вами строим нашу собственную жизнь. Это ежедневные квесты, которые мы с вами выполняем (пойти на работу, заработать деньги, купить продукты, приготовить ужин - все это те самые маленькие квесты реальности). Так почему в игре-симуляторе жизни должно быть иначе? Сюжет каждый игрок построит сам, я дам только общую канву: ваш персонаж просыпается на острове (не необитаемом, скорее - родном, где он (или она) проживает свою обычную жизнь) и обнаруживает себя в гордом одиночестве - жители двух некогда довольно оживленных рыбачьих поселков куда-то пропали. И вот вам нужно выяснить, куда они делись, вернутся ли они обратно, а если вернутся - то как дожить до их возвращения. И вот в том, чтобы дожить - основная проблема персонажа.
Что есть и что будет в моей игре?
В сингл-плеере, который планируется к выходу в конце лета (на сегодня готовность оценивается примерно в 2/3) уже имеется:
— Затерянный в океане остров (формально их 3, но 2 из них совсем маленькие) с водопадом и водопоем, населенный разнообразной живностью (в том числе и крупными животными, в появлении на острове которых нет никакого противоречия, и место кораблекрушения расставит все по своим местам), на острове имеются отдельные подлокации и заскриптованные события: зыбучие пески, песчаная буря, камнепады и обвалы в горах, приливы и отливы (база для погодных условий), два рыбацких поселка, где каждая хижина скрывает свои тайны, опасности и ценный лут, пещеры, которые могут быть исследованы.
— Инвентарь персонажа с крафт-системой и базовой системой строительства (похожей на таковую в PlanetSide 2: собираются ресурсы по рецепту, крафтится предмет, позиционируется и выставляется на сцене), хранилища (ящики, бочки, корзины, в которых может находиться ценное содержимое).
— Параметры персонажа включают в себя: голод, жажду, жару и холод, опыт за действия, усталость, здоровье, некоторые из них индицируются не привычными по играм индикаторами, а например паром изо рта (в холодную ночь) или маревом на горизонте (в полуденную жару).
— Базовая система плавания персонажа, теперь между островками можно перемещаться (если не боитесь водных хищников), но если забыть о стамине — можно и утонуть.
— Острова заселены различной живностью, для разных типов которой имеется разный искусственный интеллект (пока базовый, но курицы уже гуляют по поселкам и несут яйца, крокодилы атакуют из-под воды, носорог напрягается, когда у него перед носом мельтешит человеческая букашка, а бегемот защищает беспомощных детенышей, превращающихся в опасных противников в случае смерти «папы»), имеются птицы, добавляющие рандомности и насыщенности картинке.
— Реализована смена времени суток и начата подготовка различных погодных условий (как упоминавшиеся ранее приливы и отливы утром и вечером, есть заготовка под штормы, шквалы и ураганы с ливнем и грозами, имеется базовое землетрясение, вызывающее срабатывание всех камнепадов в горах).
— На острове имеется недостроенный жителями форт, в котором можно пострелять из пушки (если повезет — можно подстрелить крупную живность на другом конце бухты), причем пушка тоже сделана с максимальной доступной реалистичностью: ее можно зарядить ядром, она нацеливается по вертикали или может быть подвинута в сторону, выстрел производится путем поджигания фитиля факелом.
— Место кораблекрушени приоткроет завесу тайны над происхождением на острове крупных животных, и не только.
— В пещерах можно заблудиться (в большой многоуровневой) или отравиться (в заброшенном свинцовом руднике) с летальным исходом.
— В ближайших планах добавить возможность приручать диких животных (домашнюю корову уже сейчас можно подоить, например) для использования в своих целях.
— Уже есть возможность рыбачить (сетью) и даже браконьерствовать (кинув ядро в воду и собрав оглушенную взрывом рыбу)
В мультиплеере, который будет писаться снуля, но с учетом приобретенных при создании сингл-плеера знаний и контактов (со знающими и опытными людьми) планируются:
— Прозрачная и логичная экономическая система и торговля, в которой товары не появляются из воздуха, а должны быть выращены, произведены другим способом или найдены/добыты.
— Возможность покупать и захватывать собственность любого рода: бытовые мелочи, корабли, дома, даже острова и целые провинции большого континента.
— Возможность прожить жизнь любого обитателя пиратской колонии (и не только банального пирата).
— Локация будет расширена новыми островами и большим континентом, в идеале хочется сделать всепланетный охват и предоставить игрокам возможность совершать кругосветные путешествия с торговыми и военными целями.
— Будет расширен список погодных условий и катаклизмов.
Вот такая получилась история, и я полон решимости довести начатое до конца, выпустив игру, в которую мне будет интересно играть самому. А этого добиться можно только рандомизацией происходящих процессов - чтобы каждая новая игровая сессия протекала по-новому, и приводила к новому финалу.