您的位置:首页 > 移动开发 > Unity3D

unity3D使用C#遍历场景内所有元素进行操作

2017-07-14 17:38 781 查看

最近入门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()获取。

最后测试成功,按下按钮所有怪物都清空。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐