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を誤用して有効にすることはありません。