FC2ブログ
    02 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 04

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Unityでオブジェクトを消す方法3種類。SetActive、enable=false、Destroyの違いについて 

    こんにちは!坂内っす。
    2月になりました。
    令和3年2月
    令和元年が短かったせいか、やけに令和3年になるのが早かったですね!

    さて、Unityでオブジェクトを消す場合、SetActive(false)、enable = false、Destory(gameObject)
    この三通りの消し方がありますよね。
    みなさんどんな使い分けしてますか?

    こんな感じのものを作ってみました。


    Cubeの子供にCylinderを置き、ボタンを1つ作成。

    ボタンを押すとCubeに対してSetActiveや、enableやDestroyを行います。

    コードは以下の感じ。

    [Blog20210201.cs]
    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20210201 : MonoBehaviour
    {
    [SerializeField] Button btnHide;
    [SerializeField] MeshRenderer meshCube;

    private void Start() {
    btnHide.onClick.AddListener(OnClickHideCube);
    }

    void OnClickHideCube() {
    meshCube.enabled = false;
    //meshCube.gameObject.SetActive(false);
    //Destroy(meshCube.gameObject);
    }
    }


    まずは「meshCube.enabled = false;」から。




    enable = false
    によって起きる処理としては、「対象のコンポーネントを無効にする」といった感じですね。
    上記のコードの場合はmeshCubeはCubeのMeshRendererだけなので、それが無効になっただけで、オブジェクトは残っています。
    そのためCubeは消えてしまいましたが、Cylinderは残ってるといった感じになります。


    次は「meshCube.gameObject.SetActive(false);」です。
    OnClickHideCubeのメソッドの中のmeshCube.gameObject.SetActive(false);の行のコメントを外します。



    Cubeのオブジェクトが非アクティブになり、その子供も一緒に非アクティブになりました。

    オブジェクト自体のアクティブ状態を変えるならSetActiveを使うべきですね。


    では、「Destroy(meshCube.gameObject);」はどうなるでしょうか?
    想像通りの動きになるとおもいますが、もちろんCubeが消えます。



    Cube自体が消えました。

    表示画面的には、SetActive(false)とDestroy(meshCube.gameObject)と同じですが、Destroyのほうはオブジェクト自体が消えてしまうので、そのあと再度使う予定のあるオブジェクトに関してはSetActiveがいい感じですね!
    もう使わないオブジェクトを消す時は確実にDestroyで消してあげましょう。


    ということで、オブジェクトの消し方でした。
    基本的なところでしたが、いろいろと消し方があるという確認でした!
    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/767-bd8de660
    この記事にトラックバックする(FC2ブログユーザー)