最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity3D開發(fā)之獲取所有的子對(duì)象的方法詳解

 更新時(shí)間:2023年01月31日 10:45:54   作者:恬靜的小魔龍  
這篇文章主要為大家詳細(xì)介紹了三種Unity3D中獲取所有的子對(duì)象(child)的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、前言

這個(gè)問(wèn)題還是比較簡(jiǎn)單的,無(wú)非就是一個(gè)for循環(huán)就可以全部獲取到了,但是我喜歡簡(jiǎn)單直達(dá),有沒有直接就能獲取到所有的子對(duì)象函數(shù)呢,搜了好久都沒有,所以我準(zhǔn)備寫一個(gè)擴(kuò)展函數(shù),來(lái)自己補(bǔ)充這個(gè)函數(shù),一起來(lái)看一下吧。

二、如何獲取所有子對(duì)象

第一種方法

使用foreach循環(huán),找到transform下所有的子物體

foreach(Transform child in transform)
{
    Debug.Log(child.gameObject.name);
}

比如說(shuō),我有一個(gè)父物體:m_ParObj,我如何獲取到所有的子對(duì)象呢:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SplitTest : MonoBehaviour
{
    public GameObject m_ParObj;

    private void Start()
    {
        List<GameObject> m_Child = new List<GameObject>();
        foreach (Transform child in m_ParObj.transform)
        {
            //Debug.Log(child.gameObject.name);
            m_Child.Add(child.gameObject);
        }
    }
}

這樣就將所有的子對(duì)象保存了下來(lái)。

第二種方法

通過(guò)transform.GetChild(i)來(lái)獲取到所有的子對(duì)象:

for (int i = 0; i < transform.childCount; i++)
{
    Debug.Log(transform.GetChild(i).name);
}

比如說(shuō),我有一個(gè)父物體:m_ParObj,我如何獲取到所有的子對(duì)象呢:

using UnityEngine;

public class SplitTest : MonoBehaviour
{
    public GameObject m_ParObj;

    private void Start()
    {
        GameObject[] m_Child = new GameObject[m_ParObj.transform.childCount];
        for (int i = 0; i < m_Child.Length; i++)
        {
            m_Child[i] = m_ParObj.transform.GetChild(i).gameObject;
        }
    }
}

這樣就將所有的子對(duì)象保存了下來(lái)。

三、使用擴(kuò)展方法獲取所有子對(duì)象

總感覺獲取個(gè)子對(duì)象還要用for循環(huán)有點(diǎn)麻煩,那么咱們就可以寫一個(gè)擴(kuò)展方法,直接獲取到所有的子對(duì)象

1、首先新建一個(gè)MyExtensions.cs腳本

using System.Collections.Generic;
using UnityEngine;

public static class MyExtensions
{

}

2、編寫腳本

using System.Collections.Generic;
using UnityEngine;

public static class MyExtensions
{
    public static List<GameObject> GetChild(this GameObject obj)
    {
        List<GameObject> tempArrayobj = new List<GameObject>();
        foreach (Transform child in obj.transform)
        {
            tempArrayobj.Add(child.gameObject);
        }
        return tempArrayobj;
    }

    public static GameObject[] GetChildArray(this GameObject obj)
    {
        GameObject[] tempArrayobj = new GameObject[obj.transform.childCount];
        for (int i = 0; i < obj.transform.childCount; i++)
        {
            tempArrayobj[i] = obj.transform.GetChild(i).gameObject;
        }
        return tempArrayobj;
    }
}

這有兩個(gè)函數(shù),一個(gè)是獲取所有子對(duì)象的List集合,一個(gè)是獲取所有子對(duì)象的數(shù)組集合,按需使用。

擴(kuò)展方法的使用可以參考文末補(bǔ)充內(nèi)容

3、使用擴(kuò)展方法

使用m_ParObj.GetChild()就可以調(diào)用擴(kuò)展方法:

using System.Collections.Generic;
using UnityEngine;

public class SplitTest : MonoBehaviour
{
    public GameObject m_ParObj;

    private void Start()
    {
        List<GameObject> m_Child = m_ParObj.GetChild();
        for (int i = 0; i < m_Child.Count; i++)
        {
            Debug.Log(m_Child[i].gameObject.name);
        }
    }
}

這樣就可以通過(guò)一個(gè)函數(shù)就可以獲取到所有的子對(duì)象了。

知識(shí)補(bǔ)充

Unity3D日常開發(fā)之?dāng)U展方法的使用

在程序開發(fā)中,可能會(huì)遇到現(xiàn)有類型的方法中沒有我們想要的方法,這時(shí)候就可以使用擴(kuò)展方法給已有類型添加新的方法,而無(wú)需創(chuàng)建新的派生類、重新編譯或者其他方式修改原始類型的代碼。

擴(kuò)展方法需要定義成靜態(tài)方法,通過(guò)實(shí)例方法語(yǔ)法進(jìn)行調(diào)用,參數(shù)類型就是制定方法作用于哪個(gè)類型,該參數(shù)使用this修飾符為前綴

為System.String類添加擴(kuò)展方法

下面的示例演示為 System.String 類定義的一個(gè)擴(kuò)展方法。 請(qǐng)注意,它是在非嵌套的、非泛型靜態(tài)類內(nèi)部定義的:

public static class MyExtensions
{
    public static int ReturnWordCount(this string str)
    {
        return str.Split(new char[] { ' ', '.', '?' }, System.StringSplitOptions.RemoveEmptyEntries).Length;
    }
}

調(diào)用該擴(kuò)展方法:

using UnityEngine;

public class Test_Extend : MonoBehaviour
{
    void Start()
    {
        string str = "Hello Extension Methods";
        int count = str.ReturnWordCount();
        Debug.Log(count);
    }
}

編譯結(jié)果:

為UnityEngine.GameObject類添加擴(kuò)展方法

為游戲?qū)ο笠淮翁砑觾蓚€(gè)組件

public static class MyExtensions
{
    public static void AddBRComponent(this GameObject obj)
    {
        obj.AddComponent<BoxCollider>();
        obj.AddComponent<Rigidbody>();
    }
}

調(diào)用該擴(kuò)展方法:

using UnityEngine;

public class Test_Extend : MonoBehaviour
{
    void Start()
    {
        GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj.AddBRComponent();
    }
}

到此這篇關(guān)于Unity3D開發(fā)之獲取所有的子對(duì)象的方法詳解的文章就介紹到這了,更多相關(guān)Unity獲取子對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

晋中市| 汽车| 张北县| 茂名市| 沈丘县| 紫云| 南昌市| 琼海市| 商水县| 拉孜县| 长沙县| 金沙县| 罗江县| 临沭县| 偃师市| 诸城市| 衡水市| 微博| 江北区| 渑池县| 翁牛特旗| 温泉县| 泾源县| 武义县| 拜城县| 通山县| 综艺| 四会市| 浙江省| 彭阳县| 亳州市| 泸州市| 邢台市| 洛宁县| 马公市| 灵台县| 山阴县| 尤溪县| 耒阳市| 武功县| 探索|