Как разрезать объект на несколько частей в юнити?

Я ищу способ чтобы разрезать цельный объект на несколько частей с помощью кода в Unity, и до сих пор толком не могу понять что именно мне нужно сделать.

Много где говорят про Меши или ещё что-то, на этот счёт есть ассет (за 70$) в ассетсторе юнити, и много прочего.

Есть ли какой-то не самый сложный способ резать объект допустим пополам, использовав при этом только юнити и C#?

Я уже долго не могу найти конкретного ответа на свой вопрос, потому что в этом деле много подводных камней

Заранее спасибо за любую помощь!


Ответы (2 шт):

Автор решения: roman lvov

Самым простым способом для вас, если конечно вы не эксперт в области начертательной геометрии и высшей математики, будет попросить знакомого 3D моделлера или же самому посмотреть видеоурок о том, как это сделать в том же blender, используя cell fracture. Режете, запекаете анимацию, сохраняете и после импорта в Юнити при столкновении с объектом останется только лишь проиграть анимацию разрушения. Если же вы хотите запрограммировать разрез, посмотрите видеоуроки по тому, как разрезать двумерный меш плоскостью отсечения.

→ Ссылка
Автор решения: Manciny

Есть бесплатное решение, нашел у одного прогера на просторах интернета.

Вот демонстрация его работы: видео в ютуб

Описываю как сделать:

  1. Скачать из его репозитория 2 cs файла:

    Mesh_Maker

    MeshCut

И добавить их в свой проект в любую папку со своими скриптами.

  1. Что бы реализовать разделение на части - пользуемся статическим методом 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 мы передаём:

  1. gameObject - объект, который нужно резать
  2. Vector3 anchorPoint - вектор направления секущей плоскости
  3. Vector3 normalDirection - вектор, который указывает "вправо". - нам нужно указать, что бы код далее мог разделить объекты на право и лево, в зависимости от того, где это "право".
  4. Материал, который будет применен к плоскости среза.

Возможно придется немного поэксперементироваь с векторами, но всё получится, код хорошо работает.

→ Ссылка