В целом как выглядит то, о чем пойдет рассказ:
Я работал на компанию базирующуюся в США. Один из соучредителей хотел сделать игру. Так как у меня был опыт в этом, он решил со мной реализовать этот план. При том что нанимали меня для других задач. Я не противился, мне нравится решать сложные задачи, это было гораздо интереснее чем делать ту работу, на которую меня взяли — тоже связанная с UE. Так что я принялся реализовывать проект. Шейдер, 3d модели, освещение, текстуры, UI и блюпринты…
И так! Суть игры заключается в том, что игрок обрезает кусты… Я буду избегать некоторых слов, но я думаю и без того всем всё будет понятно. В начале игры у нас есть куст, который мы заказываем по доставке, и нам надо его очистить от листьев, чтоб виднелись бутоны, с которых надо срезать листья для успешного завершения задачи. Листья на бутоне надо срезать под корень, иначе процент среза не засчитается, а чем выше процент, тем больше денег вы получите по итогу за эту работу в игре. В дальнейшем на эти деньги вы будете обустраивать свой дом превращая его из халупы в обставленный особняк по примеру ниже:
Ниже видео первой попытки. Вся суть сводиться к Slice Procedural Mesh. Вы указываете где резать объект и он режется в том месте. Можно регулировать наклон / угол этого реза. Босс попросил взять любую ветку и просто показать как она режется для ускорения процесса понимания направления работы. Я взял просто ветку и настроил работу реза. На видео видно как работает рез — на весь объект. Мне надо на каждую веточку отдельно. При том еще и листик.
Немного доработав конструкцию получился результат лучше. Ниже видео демонстрирует на цилиндрах общее решение. Т.е. у меня каждая веточка отдельная. В целом всё работает ) Но дальше было только больше.
На одном кусте было примерно 100 объектов без бутонов. Предварительно создав в 3ds Max объекты — листья и остальные составляющие, я просто переносил через TS TOOLS в UE фактически координаты этих объектов расставленных как надо, а потом наносил на эти «гнёзда» настроенные и подготовленные листья уже лежащие в UE. Делал это через EditorUtilityWidget, который создал под свои нужды. Таким образом у меня по факту листьев было с десяток и просто их дублировал автоматически расставляя.
Я мог максимально быстро создавать эти кусты, так как планировалось сделать много разных вариаций. По итогу пользовались только тремя — остальные решили создать после (не создали). Так же через EditorUtilityWidget подготавливал процедурные меши: коллизии и все остальные галочки присуще работе Slice Procedural Mesh. Так объекто очень много, это сильно упростило жизнь.
В общем теперь каждая палочка могла резаться отдельно. Следующий вопрос: когда срезаешь, к примеру ветку, то она падает, а все на ней листики и стебли продолжают висеть… Это я решил выполнить через иерархию. На ветку насаживаю веточки поменьше, а на неё уже листики. Когда происходит рез ветки, то блюпринт смотрит что у неё в иерархии, если есть еще какие то листья, то он приатачивает их к отрезаемому куску и они просто падают вместе с отрезанным. Это решение помогло не срезать ветки где есть бутоны. т. е. нельзя сразу под корень срезать ветку. Точно так же при резе учитывалось, сидит ли бубон на ветке или нет.
Дальше бутоны, на них находятся необходимые для заработка листья. Как писал выше, их надо срезать и получить за это деньги. Но надо срезать как можно больше листа, а не просто кусочек. Так как нужен чистый бутон. Это было тоже легко решаемо: расстояние от пивота листа до точки реза. Если превышает необходимое значение, то срез не считается.
При подгрузке куста в «работу» блюпринт считал количество листьев и с помощью простого вычисления показывал сколько процентов срезано с бутона.
Еще было реализовано интересное действие, которое в итоге не пошло в игру. Изначально я хотел сделать так: ножницами управляешь и сразу режешь. Это позволяло вертеть ножницами и сразу видеть где будет рез. т. е. я подставляю их и могу резать под любым углом. Это позволяло усложнить рез листиков с бутона. Если не под тем углом поставить ножницы, то в таком случае при резе ножницы задевали бутон и он портился что снижало его стоимость. Но в итоге босс хотел видеть просто иконку мышки, а ножницы прилетают и режут во время клика.
Прикрепляю общий ролик с нарезкой некоторого геймплея:
В целом всё реализовано и работает отлично За раз было три куста. Их надо подстричь, почистить и после прилетал дрон который забирал «добычу» и переводил заработанные деньги. А на эти деньги мы дальше заказывали новую партию кустов и продолжали. Игра боссом планировалась как медитативная. Под радио и соответствующую музыку в игре сидишь и срезаешь.
Еще было реализовано много механик типа того как тупятся ножницы и их необходимо чистить от грязи тряпочкой и прочее. Также эти ножницы можно было апгрейдить чтоб меньше тупились. Визуально этого отыгрывалось их декором. Добавлялись постепенно вензеля и прочее под стиль игры.
Если вам нравится, могу описать и другие механики и решения. Так как это моя первая техническая статья, в которой всё при этом теоретически рассказано, я не знаю как будет воспринята и стоит ли делать дальше.
К сожалению игра хоть и была выпущена, но имела баги, которые сложно было устранять, так как мне выдавались другие задачи по проекту. А саму игру никто не позаботился рекламировать. До момента релиза о ней никто ничего не рассказывал. В виду чего о игре никто не узнал, а я получил ценный опыт. После меня перекинули на другие задачи, а осенью и вовсе расстались, но это уже не совсем другое 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/872424/
Добавить комментарий