Всем привет! недавно задался вопросом насчет разрушений в Unity, поискал в интернете что есть на эту тему, но увы я нашел лишь кучу вопросов и обсуждений.
И нет я не заявляю что моя статья единственная в своем роде, потому что метод довольно прост, но почему-то прямого туториала для этого я не нашел.
Начнем с того что в Unity НЕЛЬЗЯ РАЗРУШИТЬ/РАЗДЕЛИТЬ/РАЗРЕЗАТЬ объект, наши разрушения будут по сути то и не разрушениями вовсе, а лишь их визуальной имитацией, поскольку как я сказал выше, невозможно по другому.
СОБСТВЕННО!
Хватит лить воду и тратить ваше время в пустую(все же я посчитал нужным оставить предисловие). Для начала вам потребуется скачать из магазина стим программу под названием Blender, после чего заходим и начинаем разбираться.
Создаем новый проект, и во вкладке «Правка/Edit» ищем кнопку «Аддоны/Addons», и пишем в поиск Cell Fracture, затем ставим рядом с ним галочку дабы включить его.

После чего переходим на саму нашу сцену в Блендере, и видим там куб который есть изначально при создании сцены.
Нас интересует вкладка «Моделирование/Modeling», заходим в нее, нажимаем на объект правой кнопкой мыши > подразделить/subdivide, и видим что куб стал как-бы в «клеточку»

Теперь вернемся на первую вкладку «Макет/Layout», нажмем на кнопку объект/object > быстрые эффекты/fast effects > Cell Fracture, и нам откроется окно для управления Аддоном.

Просто нажимаем кнопку «ДА» и смотрим за результатом.
Как можно заметить, наш куб разделился визуально, значит все прошло успешно, это и есть та самая фрагментация.

Остались последние шаги в Блендере, и можно переходить к созданию сцены, нажмем на file/файл > экспортировать/export > .fbx, и сохраним в удобную для нас папку.

Открываем Unity, создаем или открываем старый проект, и приступим собственно к сборке нашей сцены.Для этого нам понадобится создать plаne и sphere, теперь из нашей папки в окно иерархии добавляем куб что мы только что экспортировали, затем перетаскиваем его уже непосредственно на сцену.
Для того чтобы Unity пони��ал что это физический объект, нужно добавить две вещи, нажмем на наш куб в окне иерархии, тем самым раскрыв список объектов внутри (частей из которых он состоит), затем зажав shift, выделим самый первый объект из списка, и самый последний, при помощи этой манипуляции мы выделим весь список.
Осталось нажать АddComponent, и в поиске прописав collider, выбрать «Mesh Collider».

В самом коллайдере нажимаем на «Convex», для его отображения, и все.
Теперь повторяем сделанное ранее, но только уже ищем Rigidbody.

Со сферой нужно сделать тоже самое, только без коллайдера, ведь он висит там изначально.
На этом наша подготовка закончена, и можно перейти к самому интересному, как говорится — «краткость сестра таланта», именно поэтому создаем новый C# скрипт в окне иерархии, и пишем туда следующее:
Теперь последний раз выделяем все объекты в списке, нажимаем на АddComponent, и добавляем наш скрипт

Поднимаем нашу сферу над кубом, и включаем проект.

Как видим, все прекрасно работает, куб ломается, наша сфера куда-то катится.
На этом собственно все, да, возможно вы скажете что можно сделать более плавное удаление, чтобы кусочки исчезали, а не вот так вот топорно, и всякое такое.
Я лишь вам отвечу что я просто демонстрировал работу скрипта, и не вдавался в подробности того, как и когда оно будет удалять эти «обломки», а просто показал что можно и так, и ничего сложного в этом нет абсолютно.
Я не спорю что ассеты от Unity(или других разработчиков) будут лучше моих скриптов на пару строчек, но все же.
Я не делал эту статью с упором на то что меня будут читать люди знающие и понимающие Unity и язык, которые могут написать скрипт с более точечным контролем всего что происходит с объектом на сцене, я делал статью для еще обучающихся и новичков.
Не стану говорить что я хорошо и досконально знаю язык, но и не первый день в этом, в общем, на этом у меня все, надеюсь что помог кому-то, хорошего вам кода друзья!..
И нет я не заявляю что моя статья единственная в своем роде, потому что метод довольно прост, но почему-то прямого туториала для этого я не нашел.
Начнем с того что в Unity НЕЛЬЗЯ РАЗРУШИТЬ/РАЗДЕЛИТЬ/РАЗРЕЗАТЬ объект, наши разрушения будут по сути то и не разрушениями вовсе, а лишь их визуальной имитацией, поскольку как я сказал выше, невозможно по другому.
СОБСТВЕННО!
Хватит лить воду и тратить ваше время в пустую(все же я посчитал нужным оставить предисловие). Для начала вам потребуется скачать из магазина стим программу под названием Blender, после чего заходим и начинаем разбираться.
Создаем новый проект, и во вкладке «Правка/Edit» ищем кнопку «Аддоны/Addons», и пишем в поиск Cell Fracture, затем ставим рядом с ним галочку дабы включить его.

После чего переходим на саму нашу сцену в Блендере, и видим там куб который есть изначально при создании сцены.
Нас интересует вкладка «Моделирование/Modeling», заходим в нее, нажимаем на объект правой кнопкой мыши > подразделить/subdivide, и видим что куб стал как-бы в «клеточку»

Теперь вернемся на первую вкладку «Макет/Layout», нажмем на кнопку объект/object > быстрые эффекты/fast effects > Cell Fracture, и нам откроется окно для управления Аддоном.

Просто нажимаем кнопку «ДА» и смотрим за результатом.
Как можно заметить, наш куб разделился визуально, значит все прошло успешно, это и есть та самая фрагментация.

Остались последние шаги в Блендере, и можно переходить к созданию сцены, нажмем на file/файл > экспортировать/export > .fbx, и сохраним в удобную для нас папку.

Открываем Unity, создаем или открываем старый проект, и приступим собственно к сборке нашей сцены.Для этого нам понадобится создать plаne и sphere, теперь из нашей папки в окно иерархии добавляем куб что мы только что экспортировали, затем перетаскиваем его уже непосредственно на сцену.
Для того чтобы Unity пони��ал что это физический объект, нужно добавить две вещи, нажмем на наш куб в окне иерархии, тем самым раскрыв список объектов внутри (частей из которых он состоит), затем зажав shift, выделим самый первый объект из списка, и самый последний, при помощи этой манипуляции мы выделим весь список.
Осталось нажать АddComponent, и в поиске прописав collider, выбрать «Mesh Collider».

В самом коллайдере нажимаем на «Convex», для его отображения, и все.
Теперь повторяем сделанное ранее, но только уже ищем Rigidbody.

Со сферой нужно сделать тоже самое, только без коллайдера, ведь он висит там изначально.
На этом наша подготовка закончена, и можно перейти к самому интересному, как говорится — «краткость сестра таланта», именно поэтому создаем новый C# скрипт в окне иерархии, и пишем туда следующее:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FragmentSplit : MonoBehaviour { public bool isdead = false; //переменная которая обозначает разрушился объект, или еще нет public float timeRemaining = 100;//время после которого должен удалится объект после разрушения (сделано во благо оптимизации) void Start() { GetComponent<Rigidbody>().isKinematic = true;//включаем у риджидбоди синематик дабы наш объект не разрушался раньше времени } void OnCollisionEnter(Collision collision)//проверяем на объект на коллизию { GetComponent<Rigidbody>().isKinematic = false;//и если он с чем-то столкнулся, отключаем синематик тем самым разрушая его isdead = true;//делаем переменную положительной, чтобы скрипт смог понять что обьект уже "отработан", и его можно удалить } void Update() { if (isdead)//если переменная положительная, то запускаем таймер { timeRemaining -= Time.deltaTime;//сам таймер if (timeRemaining < 0) //и если время таймера меньше нуля, то { Destroy (gameObject);//просто удаляем объект } } } }
Теперь последний раз выделяем все объекты в списке, нажимаем на АddComponent, и добавляем наш скрипт

Поднимаем нашу сферу над кубом, и включаем проект.

Как видим, все прекрасно работает, куб ломается, наша сфера куда-то катится.
На этом собственно все, да, возможно вы скажете что можно сделать более плавное удаление, чтобы кусочки исчезали, а не вот так вот топорно, и всякое такое.
Я лишь вам отвечу что я просто демонстрировал работу скрипта, и не вдавался в подробности того, как и когда оно будет удалять эти «обломки», а просто показал что можно и так, и ничего сложного в этом нет абсолютно.
Я не спорю что ассеты от Unity(или других разработчиков) будут лучше моих скриптов на пару строчек, но все же.
Я не делал эту статью с упором на то что меня будут читать люди знающие и понимающие Unity и язык, которые могут написать скрипт с более точечным контролем всего что происходит с объектом на сцене, я делал статью для еще обучающихся и новичков.
Не стану говорить что я хорошо и досконально знаю язык, но и не первый день в этом, в общем, на этом у меня все, надеюсь что помог кому-то, хорошего вам кода друзья!..