1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using Object = UnityEngine.Object;
  7.  
  8. //在选中的资源中查找
  9. public static class EnumAssets {
  10.  
  11. //枚举所有的T类型的资源
  12. public static IEnumerable<T> EnumInCurrentSelection<T>()
  13. where T : Object
  14. {
  15. Object[] selectionAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
  16. foreach (var s in selectionAsset)
  17. {
  18. var temp = s as T;
  19. if (null != temp)
  20. {
  21. yield return temp;
  22. }
  23. }
  24.  
  25. }
  26.  
  27. //枚举所有的GameObject类型的资源
  28. public static IEnumerable<GameObject> EnumGameObjectInCurrentSelection()
  29. {
  30. foreach (var s in EnumInCurrentSelection<GameObject>())
  31. {
  32. yield return s;
  33. }
  34.  
  35. yield break;
  36. }
  37.  
  38. //递归枚举所有GameObject
  39. public static IEnumerable<GameObject> EnumGameObjectRecursiveInCurrentSelection()
  40. {
  41. foreach (var s in EnumInCurrentSelection<GameObject>())
  42. {
  43. foreach(var g in EnumGameObjectRecursive(s))
  44. {
  45. yield return g;
  46. }
  47. }
  48. }
  49.  
  50. public static IEnumerable<GameObject> EnumGameObjectRecursive(GameObject go)
  51. {
  52. yield return go;
  53. for(int i=0; i<go.transform.childCount; i++)
  54. {
  55. foreach (var t in EnumGameObjectRecursive(go.transform.GetChild(i).gameObject))
  56. {
  57. yield return t;
  58. }
  59. }
  60. }
  61.  
  62. //递归枚举所有Compoent
  63. public static IEnumerable<T> EnumComponentRecursiveInCurrentSelection<T>()
  64. where T : UnityEngine.Component
  65. {
  66. foreach (var go in EnumInCurrentSelection<GameObject>())
  67. {
  68. var cs = go.GetComponentsInChildren<T>(true);
  69. foreach (var c in cs)
  70. {
  71. yield return c;
  72. }
  73. }
  74. }
  75.  
  76. //枚举所有GameObject在这个目录
  77. //path是相对于Application.dataPath的 例如 Assets/Res/UI/
  78. public static IEnumerable<GameObject> EnumGameObjectAtPath(string path)
  79. {
  80. var guids = AssetDatabase.FindAssets("t:GameObject", new string[] { path });
  81. foreach (var guid in guids)
  82. {
  83. var p = AssetDatabase.GUIDToAssetPath(guid);
  84. var go = AssetDatabase.LoadAssetAtPath(p, typeof(GameObject)) as GameObject;
  85. if (null != go)
  86. {
  87. yield return go;
  88. }
  89. }
  90. }
  91.  
  92. //枚举所有资源
  93. //path是相对于Application.dataPath的 例如 Assets/Res/UI/
  94. public static IEnumerable<T> EnumAssetAtPath<T>(string path)
  95. where T : Object
  96. {
  97. var guids = AssetDatabase.FindAssets("t:Object", new string[] { path });
  98. foreach (var guid in guids)
  99. {
  100. var p = AssetDatabase.GUIDToAssetPath(guid);
  101. var go = AssetDatabase.LoadAssetAtPath(p, typeof(System.Object)) as T;
  102. if (null != go)
  103. {
  104. yield return go;
  105. }
  106. }
  107. }
  108.  
  109. //递归枚举这个目录下的GameObject的所有T类型组件
  110. //path是相对于Application.dataPath的 例如 Assets/Res/UI/
  111. public static IEnumerable<T> EnumComponentRecursiveAtPath<T>(string path)
  112. where T : UnityEngine.Component
  113. {
  114. var gos= EnumGameObjectAtPath(path);
  115. foreach (var go in gos)
  116. {
  117. var cs = go.GetComponentsInChildren<T>(true);
  118. foreach(var c in cs)
  119. {
  120. yield return c;
  121. }
  122. }
  123. }
  124.  
  125. //递归枚举这个目录下的GameObject
  126. //path是相对于Application.dataPath的 例如 Assets/Res/UI/
  127. public static IEnumerable<GameObject> EnumGameOjectRecursiveAtPath(string path)
  128. {
  129. var gos = EnumComponentRecursiveAtPath<Transform>(path);
  130. foreach (var go in gos)
  131. {
  132. yield return go.gameObject;
  133. }
  134. }
  135. }

  

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. Flex入门笔记

    Test_01.mxml <?xml version="1.0" encoding="utf-8"?> <viewer:BaseWidget  ...

  2. YII2 实现后台操作记录日志(转)

    一.连接linux服务器,创建数据文件 php yii migrate/create user_log 二.修改数据文件 console/migrations/m150721_032220_admin ...

  3. Web 安全测试

    http://blog.sina.com.cn/s/blog_a1bbddc70101dt12.html http://blog.csdn.net/pdn2000/article/details/64 ...

  4. webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成

    首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...

  5. Android Studio-开启Preview视图

    Preview视图会在切换"Design"和"Text"视图的时候自动显示,可在右侧工具栏开启: 今天无意中关闭了,找了半天,原来可以在这个地方再次开启:

  6. 简谈switch case

    工作中从buff里截取了一个字符串,然后和配置文件中的字符串名字对比 ,如果一样,处理,不一样,elseif 再判断,再处理! switch(){case : case :...... }先说语法,再 ...

  7. primefaces4.0基本教程以及增删改查

    最近试着用了用primefaces4.0,准备写一个基本的增删改查以及分页程序,但在写的过程中发现了很多问题,本想通过百度.谷歌解决,但无奈中文资料非常少,笔者在坑中不停的打滚,终于完成了一个有着基本 ...

  8. Cocos2D-X 学习笔记

    1. 3.4final控制台创建项目后,安卓编译会失败,必须手动把cocos/平台/andorid/java/src目录里的文件复制到安卓项目的src文件夹即可 2. 安卓的文件目录与win的略有不同 ...

  9. WCF服务显示的是服务器名称而不是IP地址...

    打开http://xx.xx.xx.xx:端口号/Service1.svc页面显示的服务地址为: http://xx_yy_server:端口号/Service1.svc?wsdl 是显示的服务器的名 ...

  10. Reading Famous blog to prevent me wasting time on blind wandering

    I can`t help surfing the useless bbs and some other kind of SNS. The time I begin to do it, it costs ...