Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Иммитация разрушения предмета на составные части

Приветсвую начинающих разработчиков! В данной статье мы научимся создавать иммитацию разрушения предмета на его составные части. Разбивать на части мы будем обыкновенную деревянную бочку. Предлагаю в двух словах обговорить принцип работы разбития предмета на части.

Смысл следующий: У нас есть два префаба бочки. Первый префаб расположен на игровой сцене, и состоит целиком из одного объекта бочки. А второй префаб бочки состоит из множества составных частей. При определённых условиях, первый префаб со сцены удаляется, а на его месте создаётся второй префаб, который в этот же момент и разваливается на составные части, тем самым мы иммитируем её разрушение.

Теперь приступим к делу. Первым делом создадим префаб цельной бочки, которая состоит всего из одного объекта. Назовём его Barrel. И разместим её на игровой сцене.

У данного префаба должен быть обязательно компонент RigidBody, и любой из Collider-ов. Если в качестве любого из коллайдера у Вы выбрали Mesh Collider, то в поле Convex обязательно должна стоять галочка.

Теперь создадим префаб составной бочки, которая состоит из множества более мелких деталей. В окне Hierarchy, иерархия бочки выглядит примерно так:

Теперь нам необходимо выделить все только внутренние части этой бочки, и сделать всё тоже самое, что мы делали для предыдущей бочки. То-есть, создать компонент Rigidbody и Mesh Collider, а в поле Convex проставим галочку.

Готово! Теперь давайте заранее определимся, что должно случится, чтобы произошло разрушение нашей бочки? Предлагаю разрушать бочку касанием посторонним объектом, например, мечом. Для этого создадим новый 3d объект, назовём его Sword.

Далее создадим скрипт c#, с названием DamageScript, и заранее присвойте его нашему мечу(Sword). Впишем в наш скрипт следующее содержимое:

using UnityEngine;

public class DamageScript : MonoBehaviour
{
    public GameObject destructBarrel;

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Barrel")
        {
            Destroy(other.gameObject);
            Instantiate(destructBarrel, other.transform.position, other.transform.rotation);
        }
    }
}

В строке #5 мы создали переменную destructBarrel. Заранее перетащите в неё наш префаб составной бочки через окно инспектор.

В следующих строчках кода мы с помощью метода OnTriggerEnter() проверяем вхождение объекта в область нашего коллайдера(меча), и если этот объект имеет тег Barrel(бочка), то с помощью метода Destroy() мы удаляем нашу цельную бочку, и на её месте создаём составную бочку, с помощью метода Instantiate().

Важно: создайте новый тег Barrel. Данный тег нужно присвоить первому нашему префабу, то-есть префабу цельной бочки.

Всё готово! Теперь, как только наш объект меча коснётся нашей цельной бочки, то она тут же замениться на составную бочку, которая в этот же момент развалиться на составные части.

Важно: для успешной работы метода OnTriggerEnter(), для нашего меча(объекта Sword) в поле Is Trigger необходимо поставить галочку, иначе данный метод работать не будет.

На этом всё. Если гайд был полезен для Вас, буду рад лайкам. А в одном из следующих гайдов, мы научимся разрезать один объект на несколько составных.

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

0
Будьте первым, кто оставит комментарий к этому посту
Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь