Unityでこんな感じで画像を割ります。
ちなみに予め破片モデルを用意する方法です。なので、毎回割れ方は同じです。 有料Assetならもっといいのがあるのですが。
ソース
さっさとデータ欲しい、見たい人はこちら github.com
説明
先に述べたように、予めモデルを作っておいて破壊時に散らかす方法です。
Debris
にRididbodyとColoderを設定した上で非表示(SetActive(false)
)にしておいて、スペースキーを押すと
Coliderのおかげで勝手に弾けて散らかる、という感じです。
GameObjectのDebris
の子要素に、破片用オブジェクトがないと、動かないので注意してください。
モデルはMetasequoiaで作成しました。
using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 条件 /// * このGameObject以下に破片用の子GameObject(以下破片オブジェクト)がある /// * 破片オブジェクトにRigidbodyとColiderが設定されている /// </summary> public class ImagePanel : MonoBehaviour { [Tooltip("表示させる画像")] public Texture texure = null; [Tooltip("破壊前に見える板")] public GameObject panel; [Tooltip("破壊後の破片を纏めているオブジェクト")] public GameObject debris; private bool isFinish = false; //debug void Start() { //エラー処理 if (texure == null) { Debug.LogError("Texture is null"); isFinish = true; return; } debris.SetActive(false); //飛び散らないように非アクティブにしておく //Texture設定 panel.GetComponent<Renderer>().material.mainTexture = texure; foreach (Transform child in debris.transform) { child.gameObject.GetComponent<Renderer>().material.mainTexture = texure; //破片すべてにTexture設定 } } void Update () { //debug スペースキーを押すと爆散する if (Input.GetKeyDown(KeyCode.Space) && !isFinish) { crash(); isFinish = true; } } public void crash() { debris.SetActive(true); //破片を表示 debris.transform.parent = null; //Destroy(this.gameObject)に巻き込まれないように Destroy(debris, 10.0f); Destroy(this.gameObject); } }
最初は破壊前の板、このサンプルではPanel
は使用していませんでした。
ただ、
- ヒビが見える(透明なマテリアルを適用したときには特に)
- 処理速度が遅い(Coliderの衝突判定が常に走るから)
の理由で、破壊前の板を用意しています。