using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Collections.Generic;
using System.ComponentModel;
using Object = UnityEngine.Object; //在选中的资源中查找
public static class EnumAssets { //枚举所有的T类型的资源
public static IEnumerable<T> EnumInCurrentSelection<T>()
where T : Object
{
Object[] selectionAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
foreach (var s in selectionAsset)
{
var temp = s as T;
if (null != temp)
{
yield return temp;
}
} } //枚举所有的GameObject类型的资源
public static IEnumerable<GameObject> EnumGameObjectInCurrentSelection()
{
foreach (var s in EnumInCurrentSelection<GameObject>())
{
yield return s;
} yield break;
} //递归枚举所有GameObject
public static IEnumerable<GameObject> EnumGameObjectRecursiveInCurrentSelection()
{
foreach (var s in EnumInCurrentSelection<GameObject>())
{
foreach(var g in EnumGameObjectRecursive(s))
{
yield return g;
}
}
} public static IEnumerable<GameObject> EnumGameObjectRecursive(GameObject go)
{
yield return go;
for(int i=0; i<go.transform.childCount; i++)
{
foreach (var t in EnumGameObjectRecursive(go.transform.GetChild(i).gameObject))
{
yield return t;
}
}
} //递归枚举所有Compoent
public static IEnumerable<T> EnumComponentRecursiveInCurrentSelection<T>()
where T : UnityEngine.Component
{
foreach (var go in EnumInCurrentSelection<GameObject>())
{
var cs = go.GetComponentsInChildren<T>(true);
foreach (var c in cs)
{
yield return c;
}
}
} //枚举所有GameObject在这个目录
//path是相对于Application.dataPath的 例如 Assets/Res/UI/
public static IEnumerable<GameObject> EnumGameObjectAtPath(string path)
{
var guids = AssetDatabase.FindAssets("t:GameObject", new string[] { path });
foreach (var guid in guids)
{
var p = AssetDatabase.GUIDToAssetPath(guid);
var go = AssetDatabase.LoadAssetAtPath(p, typeof(GameObject)) as GameObject;
if (null != go)
{
yield return go;
}
}
} //枚举所有资源
//path是相对于Application.dataPath的 例如 Assets/Res/UI/
public static IEnumerable<T> EnumAssetAtPath<T>(string path)
where T : Object
{
var guids = AssetDatabase.FindAssets("t:Object", new string[] { path });
foreach (var guid in guids)
{
var p = AssetDatabase.GUIDToAssetPath(guid);
var go = AssetDatabase.LoadAssetAtPath(p, typeof(System.Object)) as T;
if (null != go)
{
yield return go;
}
}
} //递归枚举这个目录下的GameObject的所有T类型组件
//path是相对于Application.dataPath的 例如 Assets/Res/UI/
public static IEnumerable<T> EnumComponentRecursiveAtPath<T>(string path)
where T : UnityEngine.Component
{
var gos= EnumGameObjectAtPath(path);
foreach (var go in gos)
{
var cs = go.GetComponentsInChildren<T>(true);
foreach(var c in cs)
{
yield return c;
}
}
} //递归枚举这个目录下的GameObject
//path是相对于Application.dataPath的 例如 Assets/Res/UI/
public static IEnumerable<GameObject> EnumGameOjectRecursiveAtPath(string path)
{
var gos = EnumComponentRecursiveAtPath<Transform>(path);
foreach (var go in gos)
{
yield return go.gameObject;
}
}
}

  

Unity3d 枚举某个目录下所有资源的更多相关文章

  1. android访问asset目录下的资源

    android提供了AssetManager来访问asset目录下的资源, 在activity中通过getAssets()获取AssetManager 常用的api如下: 1.列举路径下的资源Stri ...

  2. 安卓获取Assets目录下的资源

    获取Assets目录下的资源 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ! ...

  3. Android 如何引用com.android.internal.R目录下的资源

    Android 如何引用com.android.internal.R目录下的资源 项目需求 有一个资源跟系统上的一个资源相同,想要引用它:frameworks/base/core/res/res/dr ...

  4. Android读取assets目录下的资源

    1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过 Context.getAssets().open(“s ...

  5. Unity3d:播放物理目录下的MP3文件

    u3d里,是支持播放MP3文件的,但要放到资源里,不支持播放物理目录下的MP3文件.由于界面上无需显示,只是当作背景音乐来播放,所以想到调用c#的组件来解决此问题.主要代码都在附件中,根据需要加到自己 ...

  6. Java获取/resources目录下的资源文件方法

    Web项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用: 今天总结整理了九种方式获取resources目录下文件 ...

  7. Asp.Net配置不允许通过url方式访问目录下的资源

    Asp.Net网站发布后,有部分文件为了安全性,是不能直接通过url访问获取 通常有2种做法: 1.将文件目录建立在 App_code 或者App_Data 等默认的隐藏目录下 2.将文件的目录添加到 ...

  8. ASP.NET 通过配置hiddenSegment禁止目录下资源通过Url形式访问

    根据默认的ASP.NET配置,App_Data下的资源是禁止通过Url形式直接访问的,在实际开发中,可能也会有这样的需求,比如某些是系统资源目录,该目录下的资源也需要像App_Data目录一样禁止访问 ...

  9. Android开发之assets目录下资源使用总结

    预前知识: Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,所以访问 ...

随机推荐

  1. git高级命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  2. ps切图设置

    1. 新建设置 文件->新建->预设->自定义 1920 像素 2000 像素 72 像素/英寸 背景内容 透明 存储预设 2.视图设置 视图->显示->智能参考线选中视 ...

  3. SSH+Ext+mysql快速开发

    一.需要知识点 1.SSH整合 2.EXT使用 以及深入细节点 二.小功能实现 1.Servlet实现校验码验证 2.首页布局实现 3.struts错误信息显示(struts标签使用) 4.首页整体布 ...

  4. C#中(int)a和Convert.ToInt32(a)有什么区别

    首先,在 C# 中,int 其实就是 System.Int32,即都是32位的. 其次,(int) 和 Convert.ToInt32 是两个不同的概念,前者是类型转换,而后者则是内容转换,它们并不总 ...

  5. WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)

    最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...

  6. centos 安装 mysql5.7.9初始密码问题

    mysql5.7.9在安装完成后会,root用户会产生一个不为空的初始密码,登陆mysql就会产生问题了,有必要修改一下登陆密码: 这是从网上找的一个方法,加以总结得出来的,亲测可以:# /etc/i ...

  7. C#集合u

    List<T> 列表(动态数组),相当于C++的 vector Queue<T> 队列,先进先出 Stack<T> 栈,先进后出 LinkedList<T&g ...

  8. Web前端开发规范文档(google规范)

    (Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 区分大小写 xhtml  区分大小写,xhtml要求 标签名 属性名 值都要小写,并且要有双引号和 标签闭合. css 元素名称以及i ...

  9. 使用SandCastle创建.Net帮助文档

    使用SandCastle创建.Net帮助文档 引用自:http://www.cnblogs.com/DotNetNuke/archive/2009/04/23/1441899.html Sandcas ...

  10. Windows Phone 开发环境的搭建

    1. 系统 系统:Windows 7(32 位).Windows 7(64 位).Windows Vista SP2(32 位)和 Windows Vista(64 位)或者更高版本. 不支持 :Wi ...