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

手游开发 专栏收录该内容
10 篇文章 0 订阅

       我们在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了.

  • 6
    点赞
  • 1
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值