UnityのGameObject.SetActive関数とComponent.enabledプロパティの違い



Difference Between Gameobject



UnityプロジェクトでGameObjectを非表示にすると、gameObject.SetActive(false)を使用して目標を達成するか、有効なプロパティにfalse値を割り当てて同じ目的を達成できます。では、2つの違いは何ですか?今日私は具体的に書きますデモが検証されました。

検証を容易にするために、Imageから継承し、検証のためにメインのライフサイクル関数にLogを出力するカスタムクラスを意図的に作成しました。ここではUGUIを使用していますが、MyImage.csコードは次のとおりです。



using UnityEngine using UnityEngine.UI public class MyImage : Image { protected override void Awake() { base.Awake() Debug.Log('Enter MonoBehaviour MyImage::Awake...') } // Use this for initialization protected override void Start () { base.Start() Debug.Log('Enter MonoBehaviour MyImage::Start...') } protected override void OnEnable() { base.OnEnable() Debug.Log('Enter MonoBehaviour MyImage::OnEnable...') } protected override void OnDisable() { base.OnDisable() Debug.Log('Enter MonoBehaviour MyImage::OnDisable...') } // Update is called once per frame void Update () { } }

以下のスクリーンショットを見てください。



検証後、次の結論が得られます。

同じ点:

1.gameObject.SetActive関数は、上の図のチェックボックス1をオンにするか、オフにするか、非表示にするか、チェックして表示するかを制御します。



2. enabled属性は、チェックボックス2がチェックされているかどうかを制御し、明示的なルールは上記と同じです。

差:

1. UIのチェックボックス1がデフォルトでチェックされていない場合、チェックボックス2がチェックされているかどうかに関係なく、UIが表示されると、MyImage.csのすべての機能が実行されません。つまり、スクリプトが実行されます。メモリにロードされていません

2. UIのチェックボックス1がデフォルトでチェックされている場合、チェックボックス2はデフォルトでチェックされていません。 UIが表示されると、MyImage.csのAwake機能が実行され、他の機能は実行されません。これは、Awake関数を除いて、スクリプトがメモリにロードされることを意味し、他の関数は実行されません。

違いを理解した後、gameObject.SetActiveを誤用して有効にすることはありません。