Skyrim на Unity

в 14:07, , рубрики: C#, Gamedev, indiedev, indiegame, skyrim, unity, unity3d, игры, Скайрим, юнити

Привет, это моя первая статья на Хабре! И в ней я хочу поделится своими знаниями и опытом. Сразу хочу оговориться: в разработке игр я всего год. Так что, если вы профессиональный геймдев, добро пожаловать в тапочный тир!

Короче, как-то раз в мою голову пришла сверхценная идея, которая перевернула мое сознание с ног на голову. Я подумала о том, что, возможно, все то время, пока я играла во всякие: Морровинды, Обливионы, Скайримы и иже с ними игры, – окружающие мне лгали. Лгали о том, что разработать их сложнее некуда и, если ты работаешь в одиночку, тебе потребуются миллиарды лет, чтобы сделать нечто подобное. А как же бесcчетное множество инди-игр? – спросите вы. О них я не знала.

Идея

За дело! Благо, что буквально пол года назад, я открыла для себя движок Unity и вместе с ним уроки Brackeys. И начался мой тяжелый, но весьма насыщенный месяц приключений. Сейчас меня, конечно, удивляет, что проект занял всего месяц, но тогда дни длились долго.

Все как в тумане, но идея улавливается
Все как в тумане, но идея улавливается

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

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

Первые шаги

Первое с чего я начала – это с поиска разных моделек. Я искала деревья, кустарники, траву, животных, камни и так далее, далее, далее. НО как вы понимаете мои труды мне не особо пригодились, хотя я и нашла несколько подходящих моделей и пакетов, а почему я расскажу далее.

Итак, после поисков и первичной настройки на сцене имелось следующее:

  • модель оленя с анимациями бега, ходьбы и так далее

  • модель лука, которую я самостоятельно красила в Блендере (отдельная история)

  • персонаж, ходящий, бегающий, сильно бегающий (alt) и не сильно прыгающий

Персонажа на фото не видно, вы смотрите его глазами
Персонажа на фото не видно, вы смотрите его глазами

Террэин

Вы тоже видите компас?
Вы тоже видите компас?

Начало было положено, осталось только добавить местность. Но при ее создании я начала унывать. Ключевым было то, что Довакин отказывался ходить по добавленной мною земле, так как она была слишком бугристой, горы были слишком высокими, а овраги слишком глубокими. То есть я совершенно не чувствовала масштаба. Представьте, вы скульптурируете небольшую речку близ Вайтрана. С высоты птичьего полета река выглядит прекрасно, но когда вы опускаетесь на высоту метра два или полтора, оказывается, что ваша прекрасная река для маленького человека настоящий морской залив. И вы словно лилипут в стране великанов.

Все мои попытки как-то сгладить местность соответствующими кистями ни к чему не привели. Таким образом мне пришлось удалять и переделывать все заново. Снова. И снова. И снова...

Декорации

Печальная ель
Печальная ель

Но на этом останавливаться было нельзя (хотя очень хотелось). Так что я  приступила к декорации местности. И тут уж нужно было знать мат. часть. Ну, а я ее не знала, да и, когда сделала попытку узнать, не до конца прочувствовала. О чем я говорю? О растениях в общем, и о деревьях в частности. О том, что такое SpeedTree и LOD group. Короче говоря, я промучилась с последними, забила и решила сделать все деревья с нуля с помощью встроенного редактора Unity, как говорится, дешево и сердито.

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

  1. Лучшее враг хорошего

  2. Лучше законченный неплохой проект, чем незаконченный идеальный

  3. Еще тридцать три присказки, которыми я себя утешаю, когда у меня что-то не получается

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

Красоты и боль
Красоты и боль

Графика

Но этого было не достаточно, ведь местность выглядела скудно, не смотря на все мои старания, я вспомнила про пост-процессинг с его усиленными бликами, тенями, виньеткой, цветокоррекцией и возложила надежды на него. Но и это особо не возымело действия. Тогда я обратилась к источнику знаний столь неисчерпаемому на сколько неисчерпаема человеческая находчивость и мудрость. Интернет подсказал мне, что дело в color space (цветовое окружение?), по умолчанию оно стоит на Gamma, а гуру рекомендовали поставить его на Linear.  Удивительно, но это действительно сработало.

Но, пока я лопатила все настройки Unity, какие возможно, я наткнулась на маааленький чек-боксик, где-то внутри настроек освещения. Чек-боксик с заманчивым названием fog был очень привлекательным. Я не удержалась и щелкнула по нему. И дальше начались круги адовы, из которых мне предстояло выбираться несколько дней.

Фр-р-риз-з-зы

Говоря откровенно, мой компьютер плохо тянет и оригинальный Skyrim (имеется ввиду Skyrim до обновления Anniversary, после этого обновления любые видюхи, оперативки и процессоры бессильны). Но то, как картинка начала лагать после добавления, будь от трижды проклят, тумана, не поддается никакому описанию, ни нецензурному, ни литературному. Я была в большом удивлении, когда обнаружила, что запись экрана, которую я включила, чтобы записать результат трудов своих, представляет из себя слайды, а не видео.

Итак, с этим надо было что-то делать. В тех же настройках освещения я постаралась запечь свет. Конечно с первого раза у меня ничего не вышло. Но так это оставлять было нельзя. Поэтому за первым последовали еще разы и на какой-то из них у меня получилось. Правда пропали все тени, потому-то часть из них должна была генерироваться в реал-тайм...

…Сколько-то времени спустя я со всем справилась, встречайте, графика уровня Pixar:

Пуа-пуа-пуа-пуаааа
Пуа-пуа-пуа-пуаааа

Агенты

Бегут
Бегут

Все было готово, оставалось только заполнить безжизненную природу живыми существами. Как вы помните, олень у меня уже был. Нужно только было его размножить и научить двигаться по периметру. Задача, довольно простая, я использовала MeshAgent и набор точек, между которыми олени должны были курсировать. Сперва, конечно, пришлось исправить пару багов, например, на мэше были узкие места, в которых олени толпились, стукались боками, тормозили и не могли решить, чья очередь проходить первыми.

Еще из ошибок могу вспомнить  ту, что если на точку приходят два оленя одновременно, то они не дают друг другу достаточно близко подойти к точке, поэтому начинают кружить, наподобие роя. Чем дольше два оленя кружат, тем больше подходит к точке других оленей, и в какой-то момент это становится похоже на круговорот безумия. Но в целом эти баги довольно легко исправить. Так что совсем не много времени потребовалось на то, чтобы завершить задачу животноводства и приступить к задаче следующей. Необходимо было научится стрелять из лука.

Стрельба

Угол у горы - мое почтение
Угол у горы - мое почтение

Главной сложностью стрельбы из лука является стрела. Ведь если вы хотите реализовать ближний бой, вам потребуется анимация удара мечем, и немного магии Unity. С помощью  не хитрых расчетов после проигрывания анимации вы узнаете попал игрок по цели или не попал. Со стрелой дела обстоят не так, мало проиграть анимацию, нужно еще в анимацию вставить стрелу, как отдельный объект, а после пустить стрелу по прямой, причем так, чтобы стрела попала в цель, то есть в середину экрана.

В общем для меня задача оказалась нетривиальной. Сначала я хотела просто настроить анимацию так, чтобы стрела смотрела в центр экрана, и при ее продвижении вперед, она автоматически летела к середине. Но быстро отказалась от этой идеи. Потому что в таком случае при стрельбе лук и руки модели, которую я, кстати, скачала с сайта Mixamo (рекомендую начинающим, для работы с 3D анимациями и риггом), заслоняли половину обзора. Еще настроить модель анимации и стрелу очень сложно, возрастает отклонение от прямой на дальних расстояниях и при изменениях модели и анимации все необходимо переделывать заново.

Вот так выглядело то, что описано в абзаце выше
Вот так выглядело то, что описано в абзаце выше

Хотя где-то я в последствии прочитала, некоторые делают именно так (возможно все, я не шарю).

Но я решила делать иначе. Я создала скрипт, который в процессе полета стрелы выравнивал ее относительно центра камеры, который я предварительно сохраняла, конечно. Эм, ладно, вы меня поймали, я не сразу догадалась его сохранять. Ладно, не будем о грустном. Скрипт, конечно идея хорошая, но не идеальная. Главным косяком  моего подхода стало то, что, понятное дело, стрела выравнивается не сразу, а постепенно, иначе выглядело бы это, прямо скажем, не особо. Что бы выглядело особо, нужно было, чтобы выравнивание происходило еще и плавно... Короче, плавно не всегда получается. То ли я под конец устала, то ли обленилась, но на каком-то этапе решила, что ладно и так сойдет. Ускорила полет, как можно сильнее и получилось уже не так страшно, но все еще как-то не прям, чтобы очень и... Пора заканчивать.

Конец оленей и моего рассказа

Еще я замутила самую убогую смерть оленей из возможных, при попадании в оленей стрел. Олени просто падали, как деревяшки. Сквозь текстуры... Сейчас я знаю про Ragdall, но не успела использовать и посмотреть, как действует. Но тогда я иссякла и просто хотела закончить уже со всем этим.

И еще я сделала интерфейс:

  1. Компас, настоящий (крутится), а не как на скринах выше

  2. Линию жизни врага (жертвы)

  3. Имя врага (жертвы)

  4. все

Интерфейс и гибель
Интерфейс и гибель

Еще я записала трейлер Невероятные Приключения Довакина В Unity по тому, что получилось в итоге. Так что можете посмотреть.

На этом все, если вы дочитали, вы герой!

P.S. Потом я вернулась к этому проекту снова, через пару недель, и добавила Драугров, ближний бой, водопад и возможность плавать, но это уже совсем другая история.

Автор:
LissaGamesArt

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js