Unity中GameObject.SetActive函数和Component.enabled属性的区别

       我们在Unity项目里对某个GameObject进行隐藏时,用gameObject.SetActive(false)可以达到目的,也可以对enabled属性赋值false达到同样的目的,那么这两者究竟有何区别呢,今天我特意写了一个Demo进行了验证。

       为了方便验证,我特意写了一个继承自Image的自定义Class,在主要的生命周期函数里输出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和enabled了.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值