【Unity】[パート２]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
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">🌈Unity🌈<br>Blenderで作った「cell fracture」の破片をUnityに取り込んで🌸Unity側で⛱️Collider⛱️と💗Rigdbody💗を設定してボールを当ててみたよぉ😍<br>ちゃんと弾けた‼️めっちゃ気持ちいい〜👍<br>Ｏ(≧∇≦)Ｏイェェ～イ♪<a href="https://twitter.com/hashtag/unity?src=hash&amp;ref_src=twsrc%5Etfw">#unity</a> <a href="https://twitter.com/hashtag/Unity3D?src=hash&amp;ref_src=twsrc%5Etfw">#Unity3D</a> <a href="https://twitter.com/hashtag/blender?src=hash&amp;ref_src=twsrc%5Etfw">#blender</a> <a href="https://t.co/NdF2gqN1k0">pic.twitter.com/NdF2gqN1k0</a></p>&mdash; non (@nonnonkapibara) <a href="https://twitter.com/nonnonkapibara/status/1138793284648620032?ref_src=twsrc%5Etfw">June 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

1.破片をバラバラにする
<img width="297" alt="スクリーンショット 2019-06-09 12.08.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/a298635b-9ce1-779a-23ca-f036e74326e3.png">


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


2.FBX形式にエクスポートする
<img width="845" alt="スクリーンショット 2019-06-10 2.25.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/6ce9fd03-863e-770e-56e2-f51e9929e259.png">
<img width="254" alt="スクリーンショット 2019-06-10 2.26.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/23d2734b-faaf-1494-f2ac-e96cd52714f3.png">


3.Unityにて、FBXを取り込む
<img width="1231" alt="スクリーンショット 2019-06-10 2.31.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/686e960e-2ca9-64c1-fc09-91463529b58b.png">

4.破壊前のCubeと破壊後のCubeを分ける
<img width="933" alt="スクリーンショット 2019-06-10 2.34.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/4e99ba9e-7440-5e43-cf71-f685112fbccf.png">

<img width="522" alt="スクリーンショット 2019-06-10 2.35.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/d63b2c8f-66d2-829c-307f-cfb179da675f.png">


5.破壊前のCubeに、Mesh CollideとRigdbodyを設定する
<img width="1112" alt="スクリーンショット 2019-06-10 2.36.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/13d4aac6-e0dd-a41a-22c6-18c0f4e8d8a1.png">

6.破壊後のCubeにも、破片全てにMesh CollideとRigdbodyを設定する
<img width="1107" alt="スクリーンショット 2019-06-10 2.38.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/a9145996-2d14-ee38-15ee-423d9db2c3ec.png">

7.床にもCollideを設定する
<img width="1155" alt="スクリーンショット 2019-06-10 2.40.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/bfadceb0-5dc9-63e8-64fa-a5a2f4605015.png">


8.ボールにもCollideを設定する
<img width="1121" alt="スクリーンショット 2019-06-10 2.42.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/8f82320d-4337-b4ba-4d17-272d4c9ed44d.png">

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

```c#: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.新しいゲームオブジェクトを作って、ボールを投げるスクリプトを設定する
<img width="1305" alt="スクリーンショット 2019-06-12 22.57.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93155/9395153b-1e9b-510f-b291-26315d52e27f.png">

```c#: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);

    }
}
```



完成！！
<br><br><br>

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

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

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