ぶっ壊すとは?
こちらのサイトを参考にさせて頂きました。
リンク先ではムニャムニャという表現が使われていますが、今回の私の用途は、
・爆発した後
・燃えた後
・風化してボロボロになった後
なのでぶっ壊すという表現を使っています。
デモ
今回協力していただくアセットはこれです。→リンク
せっかくきれいに作ってあるのにすみませんぶっ壊します。
ぶっ壊れました。
近くで見ると機械的でバグのようにも見え、使いものにならない感じが目立ちますが
少し離れるだけで かなりぶっ壊れた感じが出ます。
コード
とてもシンプルです。
全ての頂点を取得した後、適当なポジションを追加して再度頂点をセットしているだけです。
パラメータを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機能のオンオフができます。
StaticBatchingがオンになっている状態で家具をStaticにすると
画像のように文字通りMeshがCombineされました。
この状態で先程のぶっ壊しを実行すると怒られるので
私はぶっ壊したいオブジェクトのStaticをオフにしました。
Batchingが発動する条件については私はまだ曖昧なのでこれから勉強しようと思ってます。