2013-08-20 16:40:58 xuanjian6 阅读数 18107
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

	void Start () {
		foreach(Transform tran in GetComponentsInChildren<Transform>()){//遍历当前物体及其所有子物体
			tran.gameObject.layer = 30;//更改物体的Layer层
		}
	}

当需要隐藏一部分物体时,可以使用Layer过滤。

在Camera中设置Culling Mask选择要观察的Layer

2019-06-02 13:42:12 Mr_Sun88 阅读数 281
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

                         Unity3D基础知识——遍历子物体


目录

1、博客介绍

2、内容

(1)遍历子物体

(2)遍历子孙物体

(3)筛选遍历

3、推送

4、结语


1、博客介绍

本篇将记录基础知识遍历某物体的子物体或者遍历子物体以及孙物体,或者筛选遍历


2、内容

(1)遍历子物体

(该方法之遍历子物体,不涉及孙物体)

                foreach (Transform child in transform)
		{
			Debug.Log("子物体名称:"+child.name);
		}
	        for (int i = 0; i < transform.childCount; i++)
		{
			var child = transform.GetChild(i);
			Debug.Log("子物体名称:"+child.name);
		}

(2)遍历子孙物体

(该方法可以遍历所有的子物体和孙物体)

                for (int i = 0; i < GetComponentsInChildren<Transform>(true).Length; i++)
		{
			Debug.Log("子物体名称:"+GetComponentsInChildren<Transform>(true)[i].name);
		}
                foreach(Transform child in GetComponentsInChildren<Transform>(true))
		{
			Debug.Log("子物体名称:"+child.name);
		}

(3)筛选遍历

(该方法可以获得子孙物体中具有特定属性的物体)

                for (int i = 0; i < GetComponentsInChildren<Button>(true).Length; i++)
		{
			Debug.Log("子物体名称:"+GetComponentsInChildren<Button>(true)[i].name);
		}

                注:输出子孙物体中的所有Button
                foreach(Transform child in GetComponentsInChildren<Text>(true))
		{
			Debug.Log("子物体名称:"+child.name);
		}
                注:输出子孙物体中所有的Text

3、推送

没啥推得。。。


4、结语

本篇记录用,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!!

2015-07-02 16:08:46 u012842807 阅读数 7947
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。


    public GameObject[] obj;

    void Awake()
    {
   
        for (int i = 0; i < obj.Length; i++)
        {
            for (int j = 0; j < obj[i].transform.childCount;j++ )
            {
                print("obj[i].transform.childCount=" + Enemy_Path[i].transform.childCount);
                obj[i].transform.GetChild(j).GetComponent<"想要获取的组件">().enabled = false;
            }


          
        }

    }


蛮牛博客:http://www.unitymanual.com/home.php?mod=space&uid=8069&do=blog&view=me


2016-12-27 17:09:18 haobaworenle 阅读数 14166
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

参考文章:

Unity3d获取物体的所有子物体对象(child)

如何正确删除子物体



核心代码:

foreach (Transform childTr in transform)
{ 
  Debug.Log("childTr子物体名字:"+childTr.gameObject.name);
}

示例:

List lst = new List;
foreach (Transform child in transform)
{
    lst.Add(child); 
    Debug.Log(child.gameObject.name);
}
for(int i = 0;i < lst.Count;i++)
{
    Destroy(lst[i].gameObject);
}

示例中要注意的一点是,遍历foreach删除的方法只在运行时Destroy有延迟时有效,最好还是要将它储存到一个LIST里面,然后用for循环一个个去删。当然下面这样也行,每次都获取一下索引的子物体,删除即便延迟也没问题。
for (int i = tr.childCount - 1; i >= 0; i--) {
    Destroy(tr.GetChild(i).gameObject);
}

Destroy操作是延迟的,对象会活到帧的结尾,然后必定销毁。object destruction 是在所有的 update 执行之后的,所以在update之后才算真正销毁,update结束前还可以继续调用和响应委托等。如果自己删除子物体之后,再新建子物体,发现原来的子物体的函数依旧被调用了,就是这个问题,可以利用yield return new WaitForEndOfFrame();等待当前帧结束再做处理。

没有更多推荐了,返回首页