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

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

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/dhx96/p/7171631.html
Copyright © 2011-2022 走看看