子物体_unity子物体 - CSDN
精华内容
参与话题
  • Unity 删除所有子物体

    千次阅读 2019-01-20 16:55:00
    新建一个脚本,将下面脚本挂载到父物体上 注意: 实测第一种初始化删除会快很多,而且没有Update()方法,只在初始化执行一次;第二种方法执行完之后在Update()里面还是会不停的执行判断逻辑 目录结构如下: ...

    新建一个脚本,将下面脚本挂载到父物体上

    注意: 实测第一种初始化删除会快很多,而且没有Update()方法,只在初始化执行一次;第二种方法执行完之后在Update()里面还是会不停的执行判断逻辑

    目录结构如下:

    第一种方法:Start()

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class DeleteAllTest : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    		DeleteOldImage ();
    	}
    	// 初始化删除
    	void DeleteOldImage(){
    		for (int i = 0; i < transform.childCount; i++) {
    			Destroy (transform.GetChild (i).gameObject);
    		}
    	}
    	
    }
    

    第二种方法:Update()

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class DeleteAllTest : MonoBehaviour {
    
    
    	// Update is called once per frame
    	void Update () {
    		for (int i = 0; i < transform.childCount; i++) {
    			Destroy (transform.GetChild (0).gameObject);
    		}
    	}
    }
    

    关于下面评论的测试:代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class DeleteAllTest : MonoBehaviour
    {
    
        // Use this for initialization
        void Start()
        {
            //DeleteOldImage ();
        }
        void Update()
        {
            for (int i = 0; i < transform.childCount; i++)
            {
                Destroy(transform.GetChild(0).gameObject);
                Debug.Log("Destroy:" + transform.GetChild(0).gameObject.name);
            }
    
    
        }
        // 初始化删除
        void DeleteOldImage()
        {
            for (int i = 0; i < transform.childCount; i++)
            {
                Destroy(transform.GetChild(i).gameObject);
                Debug.Log("Destroy:" + transform.GetChild(i).gameObject.name);
            }
        }
    }
    
    

    测试结果如下:(两种方法都能正常删除所有子物体)

    运行前:

    RunTime: 

    展开全文
  • 看API时想到了这个问题,如何获得一个物体的所有子物体,在Unity的API有这个函数 Component.GetComponentsInChildren 获取子物体组件列表。 首先是在Unity软件中创建了如图的物体。 然后创建了一个C#脚本,并把...

    看API时想到了这个问题,如何获得一个物体的所有子物体,在Unity的API有这个函数 Component.GetComponentsInChildren 获取子物体组件列表。

    首先是在Unity软件中创建了如图的物体。


    然后创建了一个C#脚本,并把脚本拖到GrandFather物体中。

    using UnityEngine;
    using System.Collections;
    
    public class FindObject : MonoBehaviour {
    
        public Transform[] grandFa;
    
    	// Use this for initialization
    	void Start () {
            grandFa =  GetComponentsInChildren<Transform>();
    
            foreach (Transform child in grandFa)
            {
                print(child.name);
            }
    
    	// Update is called once per frame
    	void Update () {
    	
    	}
    }
    

    点击运行会出现如下结果。


    这样就可以查找到一个物体中的所有子物体了。

    但是,另一个问题又来了。


    如果我不激活某个物体,会怎样呢

    首先,先把其中一个物体的Inspector面板的对头去掉,在这里我把Father的对头去掉



    然后重新运行会得到如下结果。


    这样会看到其中的Father物体及其子物体并没有打印出来。


    但是我们怎么让未激活的物体及其子物体也打印出来呢?



    只需要在

    grandFa =  GetComponentsInChildren<Transform>();//括号里面加个true就好了。
    grandFa =  GetComponentsInChildren<Transform>(true);

    
    
    

    这样就能完美解决了,各取所需吧。

    展开全文
  • 递归查找子物体/获取子物体上组件

    千次阅读 2017-10-19 20:24:30
    Unity3d工具类
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Globe : MonoBehaviour {
    
        public static Transform FindChild(Transform parent, string name)
        {
            Transform item = null;
            //寻找自身一级目录下的子物体有没有该名字的子物体
          item=  parent.FindChild(name);
           //如果有,返回他
          if (item != null) return item;
          Transform go = null;
            //如果没有,就吧该父物体所有一级子物体下所有的二级子物体找一遍(以此类推)
    
          for (int i = 0; i < parent.childCount; i++)
          {
           go=   FindChild(parent.GetChild(i), name);
           if (go != null)
               return go;
          }
          return null;
        }
    
    
        public static T FindChild<T>(Transform parent,string name) where T:Component
        {
           Transform item=null;
           item= FindChild(parent, name);
           if (item != null)
               return item.GetComponent<T>();
           return null;
        }
    }
    
    
    展开全文
  • 实例化为子物体

    2015-12-07 16:43:57
    GameObject g=Instantiate(cube)as GameObject; g.transform.parent=你想成为父物体的对象;
    1,GameObject g=Instantiate(cube)as GameObject;
    g.transform.parent=你想成为父物体的对象;
    2,


        GameObject  grassPres = GameObject.Instantiate (gressPre);
        grassPres.transform.SetParent (grassPos.transform);

        grassPres.transform.position=grassPos.transform.position;

    (   grassPres.transform.SetParent (null); 解除父子关系)
    展开全文
  • using System; using UnityEngine; using UnityEditor;public class AddChild : ScriptableWizard ...//要增加子物体的对象 public int addObjectCount = 10; //要增加的数量 public string prefix =
  • GameObject.Find("父物体名").transform.FindChild("子物体名");
  • Unity获取物体下的物体

    万次阅读 2019-05-06 08:53:30
    Unity获取当前物体的所有子物体 (一)通过使用GetComponentsInChildren() 我们首先先创建一个脚本,在其中Start()方法中添加如下代码 void Start () { Transform[] father = GetComponentsInChildren&...
  • foreach(Transform value in transform) { // Do some thing...... }
  • 获取子物体数量---Transform.childCount

    千次阅读 2018-01-16 17:45:43
    如何判断一个物体下是否有子物体?getchild(0)!=null?显然不可取 那去获取拿到子物体数量?transform.GetChildCount();可以解决 但在新版本中已被弃用,可用transform.childCount来直接获取子物体数量。 using ...
  • 开始是找了下U3D的SCRIPT手册,发现找不到这玩意。然后在谷歌搜"unity3d get all child"才找到了答案。很简单的答案,不过挺有意思的,挺好用。 ...foreach (Transform child in ...transform是你所需要找的物体
  • unity获取所有子物体

    千次阅读 2019-05-29 17:33:25
    以前我都是这么写的 // Use this for initialization void Start () { for (int i = 0; i < transform.childCount; i++) { Debug.Log(transform.GetChild(i).name); } } ...后来朋友安...
  • Unity3d获取物体物体对象(child)

    千次阅读 2018-10-10 16:21:33
    foreach (Transform child in transform) { Debug.Log(child.gameObject.name); }  
  • unity 找到父物体下的子物体

    万次阅读 2018-01-15 13:28:14
    GameObject obj = GameObject.Find("Image Bg");  //首先找到父物体  GameObject zhen = obj.transform.Find("zhen").gameObject;  //然后找到父物体下的子物体
  • public static GameObject FindHideChildGameObject(GameObject parent, string childName) { if(parent.name == childName) { return parent; } if(parent.transform.childCount ) ...
  • using UnityEngine; using System.Collections; public class ResourcesLoadObj : MonoBehaviour { void Start() { foreach (Transform child in gameObject.transform) { Deb
  • unity中如何获取所有子物体的组件

    万次阅读 2015-07-02 16:20:26
    public GameObject[] obj;  void Awake()  {    for (int i = 0; i  {  for (int j = 0; j  {  print("obj[i].transform.childCount=" + E
  • unity获取物体下的所有物体

    万次阅读 2016-03-24 09:54:08
    1 通过标签来寻找 3 4 5 6 7 8 9 void ForeachObjs()  {  //GameObject objs[] = GameObject  objs = GameObject.FindGameObjectsWithTag("Cu
  • Unity通过父物体找到所有子物体

    千次阅读 2016-12-05 11:09:03
    sing UnityEngine; using System.Collections; public class GameSchedule : MonoBehaviour {  private GameObject UI;  void Awake()  {  UI = GameObject.Find("UIRoot"); ...vo
  • public Transform[] grandFa; public List&lt;GameObject&gt; animObs = new List&lt;GameObject&gt;(); public int indexAnim = 0; // Use this for initialization void Start() ... ...
  • Unity通过对象获取父对象例子

    万次阅读 2018-03-28 14:16:51
    GameObject titleFrame = itemNameLabel.gameObject.transform.parent.gameObject;titleFrame.transform.localPosition = _titleFramePosition_Others;
1 2 3 4 5 ... 20
收藏数 111,627
精华内容 44,650
关键字:

子物体