Всем привет!!!
Продолжу рассказ о том, как я делаю рогалик. С предыдущими частями можно ознакомиться тут:
Как я решил делать рогалик на Unity
Как я решил делать рогалик на Unity. Часть 2
Как я решил делать рогалик на Unity. Часть 3.1
В прошлой части я закончил на том, что сделал голую модель персонажа. Теперь нужна одежда!
Так как это будет рогалик, то одежда должна получиться максимально разнообразной. Я решил дать возможность делать одежду из разных видов материалов (хлопок, джинса, кожа, сетка и т.д.). Слишком затратно было бы делать по десять текстур на каждый элемент одежды, поэтому я решил разбить текстуру одежды на постоянную часть (ремень на штанах или подошва у ботинок всегда будут одинаковыми, не зависимо от материала) и часть заливаемую текстурой выбранного материала. Если кто-то знаком с 3d моделированием, то он сразу скажет, что получится не очень так как будут видны uv швы. И да, видны они будут, но так как камера всегда находится на определенном расстоянии от персонажа, то это не сильно бросается в глаза.
С текстурками разобрались, дальше проще. Сейчас одежда представляет из себя отдельные динамически добавляемые модельки. Если элемент одежды полностью "закрывает" тело, то оно скрывается, а нижние слои одежды (например, трусы под штанами. Да, они там есть) и вовсе не подгружаются за ненадобностью.
Однако, у такого подхода есть один серьезный недостаток. Если верить документации unity, а верить ей стоит, то каждая отдельная модель одежды будет жрать производительность. Поэтому все модели одного персонажа надо запекать в одну супермодель. Я этого не стал делать, так как это во-первых достаточно сложно (на самом деле нет), а во-вторых во время снятия/надевания одежды возможны лютые просадки фпс. Поэтому решил оставить все как есть, и если потом будут проблемы, о буду что-то выдумывать. Если кто-то сталкивался с похожей задачей - можете отписать в комменты.
Следующей мини проблемой стало то что не вся одежда полностью закрывает тело. В таких случаях тело начинает нагло выглядывать из под одежды. Решить это было достаточно просто - на каждый элемент одежды рисуется маска по которой будет скрываться тело. Выглядит это примерно как-то так:
Теперь наш персонаж одет, полностью одет. Так что пришло время анимаций. Рассказывать тут особо не о чем, кроме того что объединить все анимации в одну плавно работающую систему это адский труд.
Вот пример того как персонаж бегает по холмам:
Как можно было заметить, персонаж может "ускоряться" и входить в "скрытный режим". Также есть отдельное состояние "сломленного" персонажа, в которое он будет переходить при низком показателе здоровья. Точнее при высоком показатели боли. В игре планируется нестандартная система основанная на "количестве крови" и "боли", при потере/превышении которых персонаж будет умирать (или делать вид, что умер).
Следующим логичным шагом стало добавление в игру оружия. Также, как и с одеждой, мне хотелось добиться максимальной вариативности. Поэтому всё оружие "модульное" и состоит из различных насадок, как обязательных (вроде рукояти или цевья), так и опциональных (прицелы, глушители). При этом магазин не является "насадкой", это отдельный игровой объект. Магазины могут быть разной вместимости (например, для АК-подобного оружия это 30, 45 и 60 патрон) и хранятся отдельно в инвентаре. Магазины надо будет "заряжать" патронами отдельно и заранее. Не стал сильно упарываться и поэтому один магазин можно будет заправлять только конкретным видом боеприпасов (оболочечными или бронебойными).
А вот и наглядная демонстрация (не обращайте внимание на то что автомат косо стреляет, не занимался ещё настройкой прицеливания):
Если присмотреться, то можно заметить, что во время перезарядки отстрелянный магазин выбрасывается на землю. Однако, это будет не обязательно делать. Их можно сразу возвращать в инвентарь, но это займет больше времени на процесс перезарядки.
И в качестве бонуса граната:
На этом на сегодня всё. Дальше я пошел заниматься погодой и окружением (сейчас текстурка травы и весь задний фон тестовые), как доделаю, то будет следующий пост.