FC2ブログ
    05 «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.» 07

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

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

     

    【ハルシオンブログ】オブジェクトのONOFFとコンポーネントのONOFFは別ですよ。SetActiveとenabledを使い分けよう。 

    おはようございます。
    10月もそろそろ終わりですね。

    Unityの基本的な機能ですが、オブジェクトのONOFFにSetActiveとenableって使ってますか?
    同じような感じにみえて、違う処理なんですよね。

    要点をまとめると、SetActiveはオブジェクトをONOFF。
    enabledはコンポーネントをONOFF。

    この違いです。

    SetActiveをしてみます。

    [Blog20211025.cs]

    using UnityEngine;

    public class Blog20211025 : MonoBehaviour
    {
    [SerializeField] GameObject cube;

    private void Start() {
    cube.SetActive(false);
    }
    }



    これを実行すると、こうなる。


    オブジェクトがOFFになります。

    enabledの方はこういうことができません。

    [Blog20211025.cs]

    using UnityEngine;

    public class Blog20211025 : MonoBehaviour
    {
    [SerializeField] GameObject cube;

    private void Start() {
    cube.enabled = false;
    }
    }


    enabledのところがエラーになりますね。

    さきほど「enabledはコンポーネントのONOFF」といった通り、cubeオブジェクトについているコンポーネントを指定しないとenabledはいじれません。

    [Blog20211025.cs]

    using UnityEngine;

    public class Blog20211025 : MonoBehaviour
    {
    [SerializeField] GameObject cube;

    private void Start() {
    cube.GetComponent<MeshRenderer>().enabled = false;
    }
    }



    これはできますね。
    実行してみましょう。



    オブジェクトはONのままですが、MeshRendererがOFFになりました。
    (まぁMeshRendererをゲットしてenabledしたから当たり前だけど)

    という感じで、この2つのONOFF関数は別の動きをします。

    GameObject.Findを使ってオブジェクトを取得する場合、SetActiveで消したやつは取得できなくなるので注意してください。
    enabledでコンポーネントをOFFにしただけのものは、Findで取得できます。

    同じONOFFにする関数ですが、それぞれのシチュエーションにあった方を使ってください。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

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