多くのコンポーネントには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でアクティブにすることができます。
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?)
isKinematic = trueと記述することで、Rigidbodyの物理演算を止めることができます。
using UnityEngine;
public class Sample : MonoBehaviour
{
void Start()
{
// Rigidbodyコンポーネントを取得
Rigidbody rb = GetComponent();
// Is Kinematicをtrueにする
rb.isKinematic = true;
}
}