LoginSignup
5
3

More than 3 years have passed since last update.

【Unity(C#)】Meshをぶっ壊す方法

Last updated at Posted at 2019-06-03

ぶっ壊すとは?

こちらのサイトを参考にさせて頂きました。

リンク先ではムニャムニャという表現が使われていますが、今回の私の用途は、
・爆発した後
・燃えた後
・風化してボロボロになった後
なのでぶっ壊すという表現を使っています。

デモ

今回協力していただくアセットはこれです。→リンク

せっかくきれいに作ってあるのにすみませんぶっ壊します。

早速ですが、こちらです。
MeshBreak.gif

ぶっ壊れました。
近くで見ると機械的でバグのようにも見え、使いものにならない感じが目立ちますが
少し離れるだけで かなりぶっ壊れた感じが出ます。

コード

とてもシンプルです。
全ての頂点を取得した後、適当なポジションを追加して再度頂点をセットしているだけです。
パラメータをInspector上でいじればぶっ壊れ具合をいい感じに調整できます。

変形させたいオブジェクトにアタッチ
using System.Collections.Generic;
using UnityEngine;

public class BreakMesh : MonoBehaviour
{
    [SerializeField]
    float breakValue = 0.1f;

    void Start()
    {
        List<Vector3> vertextList = new List<Vector3>();

        MeshFilter myMesh = this.gameObject.GetComponent<MeshFilter>();

        Vector3[] vertPos = myMesh.mesh.vertices;

        for (int i = 0; i < vertPos.Length; i++)
        {
            vertextList.Add(vertPos[i]);
            vertextList[i] += new Vector3(Random.Range(-breakValue, breakValue), Random.Range(-breakValue, breakValue), 0);
        }

        myMesh.mesh.SetVertices(vertextList);
    }
}

Batching

BatchingというUnityの負荷軽減機能でMeshをまとめて読み込むことができます。
PlayerSettingsからBatching機能のオンオフができます。
baching.PNG

StaticBatchingがオンになっている状態で家具をStaticにすると
画像のように文字通りMeshがCombineされました。
Batching.PNG

この状態で先程のぶっ壊しを実行すると怒られるので
私はぶっ壊したいオブジェクトのStaticをオフにしました。

Batchingが発動する条件については私はまだ曖昧なのでこれから勉強しようと思ってます。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3