【Unity】[パート2]Blenderで作った「cell fracture」の破片をUnityに取り込む


環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Blender v2.79.6
⭐️Mac Book
⭐️Unity 2018.2.15f1

↓↓↓実際に動かした内容
https://twitter.com/nonnonkapibara/status/1138793284648620032

1.破片をバラバラにする

詳細は下記のページを参照
【Unity】[パート1]Blenderで作った「cell fracture」の破片をUnityに取り込む
https://qiita.com/nonkapibara/items/4ce52d6bf58ccd486a6a

2.FBX形式にエクスポートする

3.Unityにて、FBXを取り込む

4.破壊前のCubeと破壊後のCubeを分ける

5.破壊前のCubeに、Mesh CollideとRigdbodyを設定する

6.破壊後のCubeにも、破片全てにMesh CollideとRigdbodyを設定する

7.床にもCollideを設定する

8.ボールにもCollideを設定する

破壊前と破壊後のオブジェクトを、非表示、表示の切り替えをする。
ボールが破壊前のオブジェクトに当たったら、破壊前を非表示にし、破壊後のオブジェクトを表示するようにした。

ballScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ballScript : MonoBehaviour {
#pragma warning disable 0649
    [SerializeField] GameObject nomal_cube;
    [SerializeField] GameObject break_cube;
    // Use this for initialization
    void Start () {
        // 破壊キューブ 非表示
        break_cube.SetActive(false);
        // 破壊前のノーマルキューブ 表示
        nomal_cube.SetActive(true);
    }

    /// <summary>
    /// オブジェクト同士が衝突した瞬間に呼び出される
    /// Ons the collision enter.
    /// </summary>
    /// <param name="collision">Collision.</param>
    private void OnCollisionEnter(Collision collision)
    {
        // ボールと接触したらCubeを破壊
        if (collision.gameObject.tag == "normalCube")
        {
            Debug.Log("nomalCube");
            // 破壊前のノーマルキューブ
            nomal_cube.SetActive(false);
            // 破壊キューブ
            break_cube.SetActive(true);
        }
    }
}

9.新しいゲームオブジェクトを作って、ボールを投げるスクリプトを設定する

PinkBreakScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PinkBreakScript : MonoBehaviour
{
#pragma warning disable 0649
    [SerializeField] GameObject ball;
    Rigidbody rig;
    float speed = 100f; //速度[m/s]


    void Start()
    {
        float x = ball.transform.position.x;
        float y = ball.transform.position.y;
        float z = ball.transform.position.z;
        // 右から左ボールを投げる
        x = x - speed;
        var velocity = new Vector3(x, y, z);
        // ボールのRigidbodyコンポーネントを取得する
        var rigid = ball.GetComponent<Rigidbody>();
        // Rigidbodyコンポーネントを使って初速を与える
        rigid.AddForce(velocity, ForceMode.VelocityChange);

    }
}

完成!!



類似内容
【Blender】Blenderのアドオン「cell fracture」で石がバラバラ〜ってなる物、作ってみたよぉ。
https://qiita.com/nonkapibara/items/f135a3e1a4fcb9f388a9

【Blender】衝突で勢いよく飛び散るシミュレーション(cell fracture)
https://qiita.com/nonkapibara/items/9df0d86762a7fb170946

【Unity】[パート1]Blenderで作った「cell fracture」の破片をUnityに取り込む
https://qiita.com/nonkapibara/items/4ce52d6bf58ccd486a6a