Как разрезать объект на несколько частей в юнити?
Я ищу способ чтобы разрезать цельный объект на несколько частей с помощью кода в Unity, и до сих пор толком не могу понять что именно мне нужно сделать.
Много где говорят про Меши или ещё что-то, на этот счёт есть ассет (за 70$) в ассетсторе юнити, и много прочего.
Есть ли какой-то не самый сложный способ резать объект допустим пополам, использовав при этом только юнити и C#?
Я уже долго не могу найти конкретного ответа на свой вопрос, потому что в этом деле много подводных камней
Заранее спасибо за любую помощь!
Ответы (2 шт):
Самым простым способом для вас, если конечно вы не эксперт в области начертательной геометрии и высшей математики, будет попросить знакомого 3D моделлера или же самому посмотреть видеоурок о том, как это сделать в том же blender, используя cell fracture. Режете, запекаете анимацию, сохраняете и после импорта в Юнити при столкновении с объектом останется только лишь проиграть анимацию разрушения. Если же вы хотите запрограммировать разрез, посмотрите видеоуроки по тому, как разрезать двумерный меш плоскостью отсечения.
Есть бесплатное решение, нашел у одного прогера на просторах интернета.
Вот демонстрация его работы: видео в ютуб
Описываю как сделать:
Скачать из его репозитория 2 cs файла:
И добавить их в свой проект в любую папку со своими скриптами.
- Что бы реализовать разделение на части - пользуемся статическим методом MeshCut.Cut (В скрипте, откуда вызываем - прописываем using BLINDED_AM_ME;).
Пример:
Vector3 anchorPoint = new Vector3(1, 2, 3);
Vector3 normalDirection = Vector3.right;
var pieces = MeshCut.Cut(gameObject, anchorPoint, normalDirection, capMaterial);
Mesh.Cut возвращает массив из двух гейм-обжектов - это левая сторона(id 0 в массиве) разрезанного объекта, ну и соотвественно правая(id 1); Далее мы с этими объектами можем делать что хотим - накидывать ригидбади, крутить, вертеть, уничтожать, создавать клона фруто-ниндзи и т.д.
В сам метод Cut мы передаём:
- gameObject - объект, который нужно резать
- Vector3 anchorPoint - вектор направления секущей плоскости
- Vector3 normalDirection - вектор, который указывает "вправо". - нам нужно указать, что бы код далее мог разделить объекты на право и лево, в зависимости от того, где это "право".
- Материал, который будет применен к плоскости среза.
Возможно придется немного поэксперементироваь с векторами, но всё получится, код хорошо работает.