Нарезка врагов в 3D экшене про помидор с тесаком
*Основной цикл статей разработки Veggies Bloody Rampage*
В опросе прошлого поста победил пункт "Как работает нарезка врагов?".
Ну, пункт про музыку тоже победил, но про это в другой раз. Так что расскажу о нарезке врагов, тема довольна интересная!
Итак, для этой темы я просто использовал бесплатный плагин MeshSlicerFree от Hanzzz!
Нооо, немного теории (совсем немного, так как читателям это наверняка не будеть особо интересно (да и мне лень разбираться во всей этой геометрии))
В инспекторе, в скрипте MeshSlicerTest нужно заполнить:
Slice Plane - плоскость пересечения меша, по которой будет резаться сам меш.
Slice Target - префаб или просто меш (как просто MeshRenderer, так и возможен SkinnedMeshRenderer).
Intersection Material - материал, который будет применен К НОВЫМ ПЛОСКОСТЯМ ПОВЕРХНОСТИ ОТСЕЧЕННЫХ ЧАСТЕЙ НА МЕСТЕ НАРЕЗКИ (не знаю, как описать лучше, но думаю понятно о чем это).
Split Distance - расстояние в float, на которое части разделятся.
При ПКМ по скрипту в меню есть опции нарезки. Slice - для обычных MeshRenderer, Slice Skinned - для SkinnedMeshRenderer. И те же методы, но асинхронные.
Далее при вызове метода нарезки (любого из), выполняется алгоритм поиска 3 точек пересечения плоскости и меша.
И PostSliceOperation(), где result.Item1 - первая нарезанная часть, result.Item2 - вторая нарезанная часть.
Здесь кстати видны мои попытки сделать динамическую резку в PlayTime, от которой я позже отказался... ну об этом ниже
(На этом теорию можно закончить, я показал отрывисто и не ВЕСЬ код, это было бы слишком много, а я не уверен, что кто-то дочитал даже до сюда, так что вот так)
ГЛАВНОЕ - как же сделать нарезку? ДИНАМИЧНО какой-нибудь плоскостью, которая бы крутилась при свайпе в разные стороны и резала бы при атаке (так кстати, было раньше).
Или заранее приготовить варианты, но много разных?
Я выбрал второй вариант по нескольким причинам.
Для нарезанного персонажа нужен RagDoll, чтобы врага можно было красиво пинать и т.д., а для динамически созданных частей это сложно реализовать!
Слайсер режет всегда на две части! А в нарезках может случится, что рука, например отделена визуально, НО фактически остается под одним объектом как часть рэгдолла.
(именно поэтому я потом отдельно разрезал уже разрезанный меш, чтобы рука отделилась (ну, когда готовил части)!)У некоторых игроков на слабых компах это могло бы слегка подлагивать (да, даже с асинхронной резкой), неправильно работать и т.д.!
В общем так я заготовил по 4 варианта нарезки на каждого врага и просто спавнил нужную для каждого вида атаки!
(Кстати при резке меши хранятся только на сцене, пока она открыта. Поэтому с помощью скрипта-экспортера мешей я сохранял их отдельно и назначал в инспекторе.)
Что же в итоге...
Эхх, да, вышло не так эпично, как хотелось бы, НО динамическая нарезка еще будет, в некоторых мини-играх и сценах в дальнейшем!
Увидимся в след. постах!
Страница игры в Steam:
(Да, демо все еще не вышла (на проверке Valve пятый день))











