Unity GameObject.activeSelf, GameObject.activeInHierarchy,GameObject.SetActive和SetActiveRecursively


activeSelf(read only只讀):物體本身的active狀態,對應於其在inspector中的checkbox是否被勾選
activeInHierarchy(read only只讀):物體在層次中是否是active的。也就是說要使這個值為true,這個物體及其所有父物體(及祖先物體)的activeself狀態都為true。

一個物體要在場景中是可見的(不是隱藏的),那么不僅僅其本身的activeSelf要為true,其所有父物體(及祖先物體)的activeself狀態都要為true。

總結:
activeInHierarchy狀態代表物體在場景中的實際的active狀態。實際上代表的是物體及其所有祖先物體的activeSelf狀態。而activeSelf對應於其在inspector中的checkbox是否被勾選

activeSelf狀態代表物體自身的activeSelf狀態,所以當物體本身activeSelf為true,而其所有祖先物體的activeSelf狀態不全為true時,這個物體的activeInHierarchy狀態為false。

activeSelf==物體自身
activeInHierarchy==物體自身及其所有祖先物體==物體在場景中實際上是否激活

至於SetActive,改變的是物體自身的activeSelf狀態,所以,對一個物體SetActive時,其在場景中可能不會被激活,因為其祖先物體可能存在未被激活的。
SetActiveRecursively,改變物體自身及其所有子物體的activeSelf狀態,相當於對物體自身及其所有子物體調用SetActive.
由於SetActiveRecursively已過時(obsolete),未來將移除,所以,當設置一個物體及其所有子物體的active狀態時,可以調用一下方法

void DeactivateChildren(GameObject g, bool a) {
    g.activeSelf = a;
    
    foreach (Transform child in g.transform) {
        DeactivateChildren(child.gameObject, a);
    }
}

Advanced Skill :

 Using Extension Method

 

public static class Extensions
{
    public static void SetactivateForAllChildren(this GameObject go, bool state)
    {
        DeactivateChildren(go, state);
    }

    public static void DeactivateChildren(GameObject go, bool state)
    {
        go.SetActive(state);

        foreach (Transform child in go.transform)
        {
            DeactivateChildren(child.gameObject, state);
        }
    }
}

  

Now You Can Use Like That:

public  class MyTest : MonoBehaviour {

    public GameObject go;
	// Use this for initialization
	void Start () {
        //過時
        //go.SetActiveRecursively(true);
        go.SetactivateForAllChildren(true);
	}
}

 

 

 

參考:

  http://blog.csdn.net/czlilove/article/details/23827267

      Unity 3.5 到 4.0升級指南 Upgrade Guide from Unity 3.5 to 4.0

      http://game.ceeger.com/Manual/UpgradeGuide3540.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM