Русский
Русский
English
Статистика
Реклама

Из песочницы Простая имитация разрушений с использованием Unity и Blender

Всем привет! недавно задался вопросом насчет разрушений в 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 и язык, которые могут написать скрипт с более точечным контролем всего что происходит с объектом на сцене, я делал статью для еще обучающихся и новичков.

Не стану говорить что я хорошо и досконально знаю язык, но и не первый день в этом, в общем, на этом у меня все, надеюсь что помог кому-то, хорошего вам кода друзья!..
Источник: habr.com
К списку статей
Опубликовано: 09.09.2020 14:04:11
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

C

Unity

Unity3d

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru