Привет, это моя первая статья на Хабре! И в ней я хочу поделится своими знаниями и опытом. Сразу хочу оговориться: в разработке игр я всего год. Так что, если вы профессиональный геймдев, добро пожаловать в тапочный тир!
Короче, как-то раз в мою голову пришла сверхценная идея, которая перевернула мое сознание с ног на голову. Я подумала о том, что, возможно, все то время, пока я играла во всякие: Морровинды, Обливионы, Скайримы и иже с ними игры, – окружающие мне лгали. Лгали о том, что разработать их сложнее некуда и, если ты работаешь в одиночку, тебе потребуются миллиарды лет, чтобы сделать нечто подобное. А как же бес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. Потом я вернулась к этому проекту снова, через пару недель, и добавила Драугров, ближний бой, водопад и возможность плавать, но это уже совсем другая история.
Комментарии (30)
ormoulu
21.02.2022 04:50Здравствуйте, а с чего начинали изучение/работу с юнити? Если не сложно, примерный список ресурсов, которые действительно помогли?
LissaGamesArt Автор
21.02.2022 11:05Начала с простого туториала, чтобы ознакомится с основными принципами работы.
А потом просто интернет + документация, когда реализовываю что-то с чем не знакома.
Так что списка не получится.
Artyomkar
21.02.2022 10:48-1Пост о том, как начинающий игродел не знает что делает и говорит, что делать игры, такие как Скайрим - легко, а на деле создаёт какую то недоделку с кучами багов и ужасной оптимизацией, которая и 5% Скайрима в себя не вмещает.
Rskeldi
21.02.2022 12:42+3че такой душнила?
atamanenko
21.02.2022 14:52+5Имхо было бы норм, если бы эта статья лежала в хабе Читальный зал, например. А то про C# и Unity, которые в хабах числятся, тут практически ничего :)
А еще название - кликбейт, да.
VadimCoder
21.02.2022 16:00Я тоже немного удивился. Немного не по тематике Хабра. Обычно такие не приветствуют, а тут +14 кармы.
MS_Houru
21.02.2022 10:48Прочитать совсем другую историю было бы интересно. Тоже начал осваивать юнити (стаж два месяца), также занимаюсь по видео с канала Brackeys, но до создания водопада и текущей воды не дошел. А это одна из тех тем, с которой было бы очень интересно ознакомиться.
LissaGamesArt Автор
21.02.2022 11:14+3Спасибо! Надеюсь, напишу пост и о второй части, аудитория оказалась не такой колючей, как я боялась) А для воды есть множество готовых ассетов. Хотя подойдет и один приличный шейдер, его тоже необязательно писать с нуля самостоятельно.
cadovvl
21.02.2022 12:16+1Интересно, бодро и с юмором.
Имхо, маловато технических деталей, но статье лайк в любом случае.LissaGamesArt Автор
21.02.2022 12:46+1Да, это скорее развлекательный формат. Страшновато на Хабре кого-то учить))
cadovvl
21.02.2022 14:13+1Да лаааадно, тут каждый месяц выходят статьи типа "я изобрел новую сверхмощную сортировку за O(N)", "Окончательные точки над i производительности ЯП1 и ЯП2", "Курс для начинающих по ЯП десятилетней давности", "у меня был один клевый менеджерский проект, и теперь я в литературной форме опишу его в 30 статей, ибо крутой". И ничего, живут. Что-то даже популярностью пользуется.
А вам бы просто приоткрыть немного технических деталей в такой статье. И пользы от прочтения будет больше, и совет подкинут, если что не так.
Ни на чем не настаиваю: каждый пишет как хочет, но подумайте над этим при написании следующей статьи ;) .
Aldrog
21.02.2022 13:34А вы не пробовали систему экипировки (отображение различных элементов брони) реализовать? Я в своё время именно из-за неё похожий проект быстро забросил:
- готовых решений нет
- подробных туториалов нет
- судя по всему на доступных моделях, без навыков работы в блендере, ничего не сделать
Это, правда, был анриал, может в юнити ситуация чем-то отличается?
LissaGamesArt Автор
21.02.2022 14:09Пробовала, но я делала модель сама, и соответственно броню к ней. Так что похоже не ваш случай.
Еще есть такая штука как анимировать один объект через другой. В Unity есть AnimationRigging для этих целей, м.б. в ареал тоже есть нечто подобное? Это отлично подходит, чтобы разное оружие в руки модели давать, например. Правда, с одеждой-броней скорее всего такое не прокатит, так как одежда-броня деформируется в процессе носки.
Doman
21.02.2022 15:17Спасибо за статью!
Сам недавно начал вкатываться в Unity. На самом деле, в какой-то момент, был близок к тому чтобы забросить - осознал, что сделать качественную 3D игру в одиночку почти невозможно. Но потом вспомнил, что есть мобилки и VR, и решил продолжить с фокусом на последнее :)
Пока что прохожу уроки Unity на их learn сайте (недавно третий Pathway вышел про шейдеры, материалы, свет и тд). Время от времени повторяю за кем-нибудь игру, попутно переписывая код. Фаворит: FPS Survival Game от Awesome Tuts.
Мне кажется, что с приходом метавселенных, востребованность инди-разработчиков может вырасти. Делать всякие мета-предметы/дома/механики на заказ - вполне себе ремесло XXI века.
936_Vadym
22.02.2022 15:52Как-же я не полюбил юнити после ситис скайлайн. Я не разработчик, просто интересуюсь, и постоянно мониторю потребление ресурсов/взаимодействие с железом. И честное слово, с тем что увидел-недоумеваю зачем используют юнити для 3д и опенворлд. Считаю заранее не перспективный проект, нет будущего. За создание комнаты - можно похлопать, но на этом всё - максимум.
LoadRunner
Я же правильно понимаю, что сначала можно было взглядом управлять полётом стрелы? А потом этот баг был поправлен?
SergioShpadi
Звучит как премиум-фича!
DaneSoul
Прям как Redeemer из Unreal Tournament для мира Skyrim =)
tsurugi-no_ken
Звучит как бафф на стрелу. А другие баффы и дебаффы вешаемые на стрелы имеются?
JKot
Прям как ракета в hl.
Camblu
Сразу оговорюсь, я не программер ни разу, доморощенный моделлер и левел-дизайнер.
В своем изучении юнити (на тот момент как раз готовился релиз 5.0) в некоем непризнанном государстве на территории в половину области одной страны я неделю бился над проблемой с поднятием фонарика. Суть - фонарик поднимался, инстансировался меш в локальное пространство игрока (зачем мне деление на мировую и вью/хад модель?), но оставлял дикий шлейф из мешей за игроком, запоминая его поворот и положение.
Уже не помню, что было ошибкой в том коде, что-то уровня "забыл поставить break".
То есть разобрался с кватернионами, смог (почти) накидать базовый примитивный pickup system, но неделю гуглил (с оперы мини, гуляя по городу, ищя где еще ловит 2g интернет), как прервать выполнение функции)
DrPass
Главное только на колени не смотреть
Expany
Не говорите Тодду Говарду, иначе придется покупать еще один скайрим
LissaGamesArt Автор
Так и есть)