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()获取。

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

  • 相关阅读:
    关于supervisor无法监控golang代码的解决方法
    [2017BUAA软工]提问回顾
    [2017BUAA软工]个人阅读作业+总结
    解决nginx+uWSGI部署Django时遇到的static文件404的问题
    [2017BUAA软工]个人项目心得体会:数独
    Week2 Programming Assignment: Linear Regression
    eclipse如何同步自己的preference(oomph preference recorder)
    javac
    Apache Maven Compiler Plugin
    数据库与数据仓库的区别
  • 原文地址:https://www.cnblogs.com/dhx96/p/7171631.html
Copyright © 2011-2022 走看看