Привет, это моя первая статья на Хабре! И в ней я хочу поделится своими знаниями и опытом. Сразу хочу оговориться: в разработке игр я всего год. Так что, если вы профессиональный геймдев, добро пожаловать в тапочный тир!
Короче, как-то раз в мою голову пришла сверхценная идея, которая перевернула мое сознание с ног на голову. Я подумала о том, что, возможно, все то время, пока я играла во всякие: Морровинды, Обливионы, Скайримы и иже с ними игры, – окружающие мне лгали. Лгали о том, что разработать их сложнее некуда и, если ты работаешь в одиночку, тебе потребуются миллиарды лет, чтобы сделать нечто подобное. А как же бесcчетное множество инди-игр? – спросите вы. О них я не знала.
Идея
За дело! Благо, что буквально пол года назад, я открыла для себя движок Unity и вместе с ним уроки Brackeys. И начался мой тяжелый, но весьма насыщенный месяц приключений. Сейчас меня, конечно, удивляет, что проект занял всего месяц, но тогда дни длились долго.
Сначала стоит описать мою идею. Конечно, я делала не огромный мир, а малую его часть. По задумке в игре должна была быть круговая дорога, которая ограничивалась бы со всех сторон горами. По середине дороги тоже должен был возвышаться горный пик, чтобы ни Довакин, ни олени, которых я планировала выпустить на местность в качестве мишеней, не могли сбежать из этого уютного края. Игра планировалась чисто от первого лица, чтобы не мучиться с переключением лиц, как это сделано в оригинальной серии. А из оружия я решила предоставить игроку только лук. Почему лук, я не помню, по-моему, потому что мне первой попалась модель лука, когда я искала оружие на просторах интернета.
В общем, вы уже догадались, что я решила упростить себе задачу как можно сильнее. Умный ход. Жаль только, что проблем еще оставалось решить море.
Первые шаги
Первое с чего я начала – это с поиска разных моделек. Я искала деревья, кустарники, траву, животных, камни и так далее, далее, далее. НО как вы понимаете мои труды мне не особо пригодились, хотя я и нашла несколько подходящих моделей и пакетов, а почему я расскажу далее.
Итак, после поисков и первичной настройки на сцене имелось следующее:
модель оленя с анимациями бега, ходьбы и так далее
модель лука, которую я самостоятельно красила в Блендере (отдельная история)
персонаж, ходящий, бегающий, сильно бегающий (alt) и не сильно прыгающий
Террэйн
Начало было положено, осталось только добавить местность. Но при ее создании я начала унывать. Ключевым было то, что Довакин отказывался ходить по добавленной мною земле, так как она была слишком бугристой, горы были слишком высокими, а овраги слишком глубокими. То есть я совершенно не чувствовала масштаба. Представьте, вы скульптурируете небольшую речку близ Вайтрана. С высоты птичьего полета река выглядит прекрасно, но когда вы опускаетесь на высоту метра два или полтора, оказывается, что ваша прекрасная река для маленького человека настоящий морской залив. И вы словно лилипут в стране великанов.
Все мои попытки как-то сгладить местность соответствующими кистями ни к чему не привели. Таким образом мне пришлось удалять и переделывать все заново. Снова. И снова. И снова...
Декорации
Но на этом останавливаться было нельзя (хотя очень хотелось). Так что я приступила к декорации местности. И тут уж нужно было знать мат. часть. Ну, а я ее не знала, да и, когда сделала попытку узнать, не до конца прочувствовала. О чем я говорю? О растениях в общем, и о деревьях в частности. О том, что такое SpeedTree и LOD group. Короче говоря, я промучилась с последними, забила и решила сделать все деревья с нуля с помощью встроенного редактора Unity, как говорится, дешево и сердито.
Получилось не ужасно, хотя, если бы мне удалось использовать те самые модели, которые я нашла ранее, было бы в разы лучше. Но:
Лучшее враг хорошего
Лучше законченный неплохой проект, чем незаконченный идеальный
Еще тридцать три присказки, которыми я себя утешаю, когда у меня что-то не получается
В итоге, я еще добавила деталей на поверхность: вроде маленьких камней, самой жуткой лестницы, которую когда либо удавалось создать человеку, травы и скал.
Графика
Но этого было не достаточно, ведь местность выглядела скудно, не смотря на все мои старания, я вспомнила про пост-процессинг с его усиленными бликами, тенями, виньеткой, цветокоррекцией и возложила надежды на него. Но и это особо не возымело действия. Тогда я обратилась к источнику знаний столь неисчерпаемому на сколько неисчерпаема человеческая находчивость и мудрость. Интернет подсказал мне, что дело в color space (цветовое окружение?), по умолчанию оно стоит на Gamma, а гуру рекомендовали поставить его на Linear. Удивительно, но это действительно сработало.
Но, пока я лопатила все настройки Unity, какие возможно, я наткнулась на маааленький чек-боксик, где-то внутри настроек освещения. Чек-боксик с заманчивым названием fog был очень привлекательным. Я не удержалась и щелкнула по нему. И дальше начались круги адовы, из которых мне предстояло выбираться несколько дней.
Фр-р-риз-з-зы
Говоря откровенно, мой компьютер плохо тянет и оригинальный Skyrim (имеется ввиду Skyrim до обновления Anniversary, после этого обновления любые видюхи, оперативки и процессоры бессильны). Но то, как картинка начала лагать после добавления, будь он трижды проклят, тумана, не поддается никакому описанию, ни нецензурному, ни литературному. Я была в большом удивлении, когда обнаружила, что запись экрана, которую я включила, чтобы записать результат трудов своих, представляет из себя слайды, а не видео.
Итак, с этим надо было что-то делать. В тех же настройках освещения я постаралась запечь свет. Конечно с первого раза у меня ничего не вышло. Но так это оставлять было нельзя. Поэтому за первым последовали еще разы и на какой-то из них у меня получилось. Правда пропали все тени, потому-то часть из них должна была генерироваться в реал-тайм...
…Сколько-то времени спустя я со всем справилась, встречайте, графика уровня Pixar:
Агенты
Все было готово, оставалось только заполнить безжизненную природу живыми существами. Как вы помните, олень у меня уже был. Нужно только было его размножить и научить двигаться по периметру. Задача, довольно простая, я использовала MeshAgent и набор точек, между которыми олени должны были курсировать. Сперва, конечно, пришлось исправить пару багов, например, на мэше были узкие места, в которых олени толпились, стукались боками, тормозили и не могли решить, чья очередь проходить первыми.
Еще из ошибок могу вспомнить ту, что если на точку приходят два оленя одновременно, то они не дают друг другу достаточно близко подойти к точке, поэтому начинают кружить, наподобие роя. Чем дольше два оленя кружат, тем больше подходит к точке других оленей, и в какой-то момент это становится похоже на круговорот безумия. Но в целом эти баги довольно легко исправить. Так что совсем не много времени потребовалось на то, чтобы завершить задачу животноводства и приступить к задаче следующей. Необходимо было научится стрелять из лука.
Стрельба
Главной сложностью стрельбы из лука является стрела. Ведь если вы хотите реализовать ближний бой, вам потребуется анимация удара мечем, и немного магии Unity. С помощью не хитрых расчетов после проигрывания анимации вы узнаете попал игрок по цели или не попал. Со стрелой дела обстоят не так, мало проиграть анимацию, нужно еще в анимацию вставить стрелу, как отдельный объект, а после пустить стрелу по прямой, причем так, чтобы стрела попала в цель, то есть в середину экрана.
В общем для меня задача оказалась нетривиальной. Сначала я хотела просто настроить анимацию так, чтобы стрела смотрела в центр экрана, и при ее продвижении вперед, она автоматически летела к середине. Но быстро отказалась от этой идеи. Потому что в таком случае при стрельбе лук и руки модели, которую я, кстати, скачала с сайта Mixamo (рекомендую начинающим, для работы с 3D анимациями и риггом), заслоняли половину обзора. Еще настроить модель анимации и стрелу очень сложно, возрастает отклонение от прямой на дальних расстояниях и при изменениях модели и анимации все необходимо переделывать заново.
Хотя где-то я в последствии прочитала, некоторые делают именно так (возможно все, я не шарю).
Но я решила делать иначе. Я создала скрипт, который в процессе полета стрелы выравнивал ее относительно центра камеры, который я предварительно сохраняла, конечно. Эм, ладно, вы меня поймали, я не сразу догадалась его сохранять. Ладно, не будем о грустном. Скрипт, конечно идея хорошая, но не идеальная. Главным косяком моего подхода стало то, что, понятное дело, стрела выравнивается не сразу, а постепенно, иначе выглядело бы это, прямо скажем, не особо. Что бы выглядело особо, нужно было, чтобы выравнивание происходило еще и плавно... Короче, плавно не всегда получается. То ли я под конец устала, то ли обленилась, но на каком-то этапе решила, что ладно и так сойдет. Ускорила полет, как можно сильнее и получилось уже не так страшно, но все еще как-то не прям, чтобы очень и... Пора заканчивать.
Конец оленей и моего рассказа
Еще я замутила самую убогую смерть оленей из возможных, при попадании в оленей стрел. Олени просто падали, как деревяшки. Сквозь текстуры... Сейчас я знаю про Ragdoll, но не успела использовать и посмотреть, как действует. Но тогда я иссякла и просто хотела закончить уже со всем этим.
И еще я сделала интерфейс:
Компас, настоящий (крутится), а не как на скринах выше
Линию жизни врага (жертвы)
Имя врага (жертвы)
все
Еще я записала трейлер Невероятные Приключения Довакина В Unity по тому, что получилось в итоге. Так что можете посмотреть.
На этом все, если вы дочитали, вы герой!
P.S. Потом я вернулась к этому проекту снова, через пару недель, и добавила Драугров, ближний бой, водопад и возможность плавать, но это уже совсем другая история.