(この記事の使用環境: Unity5.5.0f3 Personal、Windows10)


今回は壊せるオブジェクトを作ってみました。
SnapCrab_NoName_2017-1-29_16-28-36_No-00

こんな感じ。黒い球に当たった人形がバラバラになってふっとびます。



人形の構成はこんな感じ。ゲームオブジェクトBreakableDollは、頭・胴体・左右の腕・左右の脚を子オブジェクトに持ち、壊れるためのスクリプト(「Breakable」)がアタッチされています。
SnapCrab_NoName_2017-1-29_16-16-50_No-001

スクリプトの中身。VRTKアセットのExampleにある Breakable_Cube スクリプトの処理を(強く)参考にさせてもらいました。シンプルにして一般的に使えるようにした感じ。(もとのスクリプトの解説はこの記事参照)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// --- 壊せるオブジェクトに付ける Breakable スクリプト -------------------------
public class Breakable : MonoBehaviour {

    float force = 500f;             // 壊れるときに(爆発的に)かかる力


    // --- 壊れる処理。子オブジェクトを取得してそれぞれ ExplodePart させる ------
    public void Break ()
    {
        foreach(Transform part in GetComponentInChildren<Transform>())
        {
            ExplodePart (part, force);
        }
        Destroy (gameObject, 10f);
    }


    // --- 部品にばらしてRigidbodyを付けてふっとばす --------------------------
    private void ExplodePart(Transform part, float force)
    {
        part.transform.parent = null;
        Rigidbody rb = part.gameObject.AddComponent<Rigidbody> ();
        rb.isKinematic = false;
        rb.useGravity = true;
        rb.AddExplosionForce (force, Vector3.zero, 0f);
        Destroy (part.gameObject, 10f);
    }


    // --- 衝突検出 ----------------------------------------------------------
    private void OnCollisionEnter (Collision collision)     
    {
        if (collision.gameObject.tag == "Bomb")
        {
            Break ();
        }
    }
}

人形を増やしてみたら、けっこう面白い感じになりました。


今回は以上です。