Blenderを使用したオブジェクト破壊エフェクト制作

目次

はじめに

今回はBlenderを使用して木箱の破壊エフェクトを作成していきたいと思います。

使用したバージョン

・Unity 2022.3.19f1

完成形

木箱破壊エフェクト完成形

このように木箱を開けたときに木箱が木の破片となって壊れるようになります。

木箱オブジェクトの準備

まずは破壊前と後の木箱オブジェクトを作成しましょう。木箱を作成するツールはBlenderを使用します。Blenderは無料で使えるモデリングソフトです。破壊前の木箱はUnityのCubeオブジェクトに木箱のテクスチャを貼り付けて上げるだけでもいいと思います。それでは破壊後の木箱オブジェクトを作成していきましょう。

木箱破壊後モデル作成01

立方体が作成されたら念の為、英語表記でわかりやすい名前に変更しておきましょう。Blenderの言語設定を英語にして使用している方は最初から英語になっていると思います。

次にBlenderにアドオン「cell fracture」をインポートします。今回はこのアドオンを使用して破壊エフェクトを作成していきます。

まずは編集→プリファレンスを選択します。

cellFractureインポート01

そしてアドオン→検索欄に「cell」を入力、すると検索結果にCellFractureが表示されるのでチェックボタンをクリックしてアドオンを有効化しましょう。有効化したらプリファレンスは閉じても大丈夫です。

cellFractureインポート02

インポートしたら先程のアドオンを使用する前にCubeメッシュを面ごとに分離させましょう。編集モードにして選択方法を頂点から面に変更します。面を選択したらキーボードの「P」→選択を押すと分離させることができます。

メッシュ分解

うまく分離することができたらオブジェクトモードに変更、分離した面6枚を選択して左上のオブジェクト→クイックエフェクト→CellFractureを選択。

cellFracture使用

するとCellFractureのタブが出てくるので一旦OKを押しましょう。うまく分割できたら右側のシーンコレクションから名前にcellがついていない元々のオブジェクトは削除してしまいましょう。これで破壊後モデルの作成は完了です。エクスポートしてUnityにインポートしましょう。

cellFracture使用02

Unityにインポートして実装

Unityにインポートしたらメッシュの破片全てにRigidbodyとMeshColliderを付けてスクリプトを作成します。このスクリプトでオブジェクトがアクティブになったら木の破片に物理挙動をさせて徐々にフェードさせていくようにします。

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using DG.Tweening;

namespace SleepingAnimals
{
    public class WoodenBox_Destroy : MonoBehaviour
    {
        [SerializeField]
        [Header("木の破片をフェードして消すまでの時間")]
        [Range(1.0f,5.0f)]
        float _destroyTime;
        private void OnEnable()
        {
            // アクティブ時に破壊
            destroyObject();
        }

        public void destroyObject()
        {
            var random = new System.Random();
            var min = -5;
            var max = 5;
            // 木の破片オブジェクトに破壊の物理挙動をさせる
            gameObject.GetComponentsInChildren<Rigidbody>().ToList().ForEach(r => {
                r.isKinematic = false;
                r.transform.SetParent(null);
                var vect = new Vector3(random.Next(min, max), random.Next(0, max), random.Next(min, max));
                r.AddForce(vect, ForceMode.Impulse);
                //r.AddExplosionForce(10f, transform.position, 10f);
                r.AddTorque(vect, ForceMode.Impulse);
                // 破片をフェードさせてから消す
                r.gameObject.GetComponent<Renderer>().material.DOFade(0.0f, _destroyTime);
                Destroy(r.gameObject, _destroyTime);
            });
            Destroy(gameObject);
        }
    }
}

このスクリプトを破片全てにアタッチして実際にシーンに配置してじっこうしてみましょう。うまく動くと木箱がバラバラになるはずです。

まとめ

いかがでしたか?今回は無料で使用できるモデリングソフト「Blender」で破壊エフェクトを作成してみました。ここからさらに煙エフェクトなどを追加してクオリティを上げたりしてみるともっと見た目が良くなると思います。

目次