unity3D使用C#遍歷場景內所有元素進行操作


最近入門Unity3D,跟着教程做完了survival射擊游戲,就想加一個功能,就是按一個按鈕屏幕上的怪物都清空。

如圖右下角所示。

我的方法是賦予所有怪物一個標簽Tag,然后根據標簽銷毀Gameobject。

百度了好一陣子怎么遍歷所有元素,然而大部分都是說怎么遍歷子元素或者說留下父元素之類的,可是我要的是操作所有父元素。

最后終於找到了方法,在這里記錄一下。

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

public class ClearAllEnemy : MonoBehaviour
{

    public Button ClearBtn;
    GameObject[] obj; //開頭定義GameObject數組

    void Start()
    {
        //為按鈕添加事件
        ClearBtn.onClick.AddListener(delegate () {
            ClearEnemy();
        });
    }

    void ClearEnemy()
    {
        obj = FindObjectsOfType(typeof(GameObject)) as GameObject[]; //關鍵代碼,獲取所有gameobject元素給數組obj
        foreach (GameObject child in obj)    //遍歷所有gameobject
        {
            //Debug.Log(child.gameObject.name);  //可以在unity控制台測試一下是否成功獲取所有元素
            if (child.gameObject.tag == "enemy")    //進行操作
            {
                child.gameObject.SetActive(false);
                Destroy(child.gameObject);
            }
        }

    }

}

 

關鍵代碼就是這兩行:

GameObject[] obj; //定義

obj = FindObjectsOfType(typeof(GameObject)) as GameObject[]; //獲取

這個方法是Object類的靜態方法,在所有繼承自他的類中都可以直接使用。它返回的是物體列表,所以需要數組。后面的as GameObject[]是不能省略的,如果是其他類型,那就as 其他類型[](格式:as Type[])。方法的小括號里傳入的是類的Type對象,所以用typeof()獲取。

最后測試成功,按下按鈕所有怪物都清空。


免責聲明!

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



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