[Unity] スクリプトからコンポーネントを非アクティブにする方法。

(2024/08/09)

開発環境
  • Unityのバージョン : 2022.3.32f1
  • enabled = falseを使ってコンポーネントを非アクティブにする

    多くのコンポーネントにはenabledプロパティがあり、これをfalseに設定することで、対象のコンポーネントを非アクティブにできます。
    例えば、 MeshRendererコンポーネント・BoxColliderコンポーネントを非アクティブにするコードは以下のようになります。

    using UnityEngine;
    
    public class Sample : MonoBehaviour
    {
        void Start()
        {
            // MeshRendererコンポーネントを取得
            MeshRenderer mr = GetComponent();
            // BoxColliderコンポーネントを取得
            BoxCollider bc = GetComponent();
    
            // MeshRendererコンポーネントを非アクティブにする
            mr.enabled = false;
            // BoxColliderコンポーネントを非アクティブにする
            bc.enabled = false;
        }
    } 
    

    また、対象のコンポーネントをアクティブにするには、enabled = trueでアクティブにすることができます。

    enabled = falseが使えないコンポーネント

    RigidbodyコンポーネントやTransformコンポーネントなどのいくつかのコンポーネントはenabled = falseのように記述して非アクティブにすることができません。例えば、下のようなコードは、エラーが発生します。

    using UnityEngine;
    
    public class Sample : MonoBehaviour
    {
        void Start()
        {
            // Rigidbodyコンポーネントを取得
            Rigidbody rb = GetComponent();
            // Transformコンポーネントを取得
            Transform tf = GetComponent();
    
            // エラーが発生する
            rb.enabled = false;
            // エラーが発生する
            tf.enabled = false;
        }
    } 
    

    発生するエラー:
    'Rigidbody' does not contain a definition for 'enabled' and no accessible extension method 'enabled' accepting a first argument of type 'Rigidbody' could be found (are you missing a using directive or an assembly reference?)

    'Transform' does not contain a definition for 'enabled' and no accessible extension method 'enabled' accepting a first argument of type 'Transform' could be found (are you missing a using directive or an assembly reference?)

    Rigidbodyの物理演算を止めたい場合

    isKinematic = trueと記述することで、Rigidbodyの物理演算を止めることができます。

    using UnityEngine;
    
    public class Sample : MonoBehaviour
    {
        void Start()
        {
            // Rigidbodyコンポーネントを取得
            Rigidbody rb = GetComponent();
    
            // Is Kinematicをtrueにする
            rb.isKinematic = true;
        }
    }