zoukankan      html  css  js  c++  java
  • 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()获取。

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

  • 相关阅读:
    配置ADCS后访问certsrv的问题
    CSS基本知识
    HTML的基本架构
    网站设计需要的基本知识
    系统安装Serv-U后IIS出错提示:HRESULT:0x80070020
    服务器环境配置全过程
    服务器、客户端双认证(2)
    PHP 计数排序算法
    sql语句随机取一张的数据 rand()
    PHP导入CSV文件数据
  • 原文地址:https://www.cnblogs.com/dhx96/p/7171631.html
Copyright © 2011-2022 走看看