unity3d 依赖关系获取预制件任意资源

前段时间策划们想知道UI预制件中使用了哪些音效

N多预制件、N多音效!!

如果纯人工整理的话这还不累成狗?

累成狗不说,还容易出错

所以获取音频剪辑小工具就诞生了,将策划从死亡边缘拉了回来

我们先看一下相关API手册:http://game.ceeger.com/Script/EditorUtility/EditorUtility.CollectDependencies.html

这玩意可好用了,之前也用它做过获取预制件公共资源工具

看看名字:“收集依赖关系”

那还不简单明了了,有依赖关系的东西都能获取过来嘛

我写了个方法,支持获取任意类型

这个方法你可以直接copy去用,不用自己写的。

使用方法也很简单,在这里我提供一个完整的获取预制件音频剪辑的例子。上代码咯

 1 #region HeadComments
 2 /* ========================================================================
 3 * Copyright (C) 2015 Arthun
 4 *
 5 * 作    者:Arthun
 6 * 文件名称:ArthunTools
 7 * 功    能:升哥哥工具包
 8 * 创建时间:2015/09/11 2:15:20
 9 * 版    本:v1.0.0
10 *
11 * [修改日志]
12 * 修改者: 时间: 修改内容:
13 *
14 * =========================================================================
15 */
16 #endregion
17
18 using System.Collections.Generic;
19 using UnityEditor;
20 using UnityEngine;
21
22 public class ArthunTools : EditorWindow
23 {
24     /// 音频剪辑信息 <summary>
25     ///
26     /// </summary>
27     public class AudioClipInfo
28     {
29         public string prefab = "";
30         public string audio = "";
31     }
32
33     /// 选中预制件(可多选)后按 Alt + G 键获取 <summary>
34     ///
35     /// </summary>
36     [MenuItem("Arthun Tools/Get Select Prefabs Info &G")]
37     static void GetSelectPrefab()
38     {
39         GameObject[] gos = Selection.gameObjects;
40
41         Debug.Log("getCount:" + gos.Length.ToString());
42
43         if (gos.Length == 0)
44             return;
45
46         List<AudioClipInfo> audioClipsInfo = new List<AudioClipInfo>();
47         foreach (GameObject go in gos)
48         {
49             #region 依赖关系获取音频
50             List<AudioClip> audioClips = GetPrefabDepe<AudioClip>(go);
51
52             foreach (AudioClip ac in audioClips)
53             {
54                 if (ac != null)
55                 {
56                     AudioClipInfo info = new AudioClipInfo();
57                     info.prefab = go.name;
58                     info.audio = ac.name;
59                     audioClipsInfo.Add(info);
60                 }
61             }
62             #endregion
63         }
64
65         foreach (AudioClipInfo info in audioClipsInfo)
66         {
67             Debug.Log(string.Format("prefab:{0}    audio:{1}", info.prefab, info.audio));
68         }
69
70         Debug.Log("soundCount:" + audioClipsInfo.Count.ToString());
71     }
72
73     /// 获取预制件依赖 <summary>
74     ///
75     /// </summary>
76     /// <typeparam name="T">欲获取的类型</typeparam>
77     /// <param name="go"></param>
78     /// <returns></returns>
79     static List<T> GetPrefabDepe<T>(GameObject go)
80     {
81         List<T> results = new List<T>();
82         Object[] roots = new Object[] { go };
83         Object[] dependObjs = EditorUtility.CollectDependencies(roots);
84         foreach (Object dependObj in dependObjs)
85         {
86             if (dependObj != null && dependObj.GetType() == typeof(T))
87             {
88                 results.Add((T)System.Convert.ChangeType(dependObj, typeof(T)));
89             }
90         }
91
92         return results;
93     }
94 }

文中不足之处欢迎批评指正

本文链接:http://www.cnblogs.com/shenggege/p/4799801.html

时间: 2024-09-28 20:41:16

unity3d 依赖关系获取预制件任意资源的相关文章

[Unity3d][NGUI]两种思路解决AssetBundle的依赖关系.

接上文. 使用上文中的AssetBundle打包方式生成的文件包括了依赖关系中的文件. 一般的使用中并不会发现什么问题. 可是当配合NGUI的时候,使用dynamicFont时打包AssetBundle会将每一个组件使用的dynamicFont都分开打包进去. 导出函数请參考:导出资源 导出资源包时出现的问题: 如图: 在解决依赖关系上我使用过2种方案: 第一种是使用BuildPipeline中的PushAssetDependencies和PopAssetDependencies方法来解决依赖关

[Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.

http://www.58player.com/blog-2537-85030.html 接上文,项目中因为需要UI热更新,所以我使用了AssetBundle这个解决方案.                   一般来说,我们使用AssetBundle生成资源包常用的方案是如下这么用:                  using UnityEngine;        using UnityEditor;                /// <summary>        /// 导出资源

深入解析Linux内核及其相关架构的依赖关系

Linux kernel 成功的两个原因: 灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中:每个子系统(尤其是那些需要改进的)都具备良好的可扩展性.正是这两个原因使得Linux kernel可以不断进化和改进. 一.Linux内核在整个计算机系统中的位置 分层结构的原则: the dependencies between subsystems are from the top down: layers pictured near the top depend on lower la

Prism 文档 第三章 管理组件之间的依赖关系

                                                                      第3章:管理组件之间的依赖关系 基于Prism库的复合应用程序可能包含许多松耦合的类型和服务.他们需要提供内容和接收基于用户行为的通知.因为他们是松散耦合的,他们需要一种方式进行互动和相互沟通来提供所需的业务功能. 为了集中这些不同的块,基于Prism库的应用程序依赖于依赖注入容器.依赖注入容器通过提供设施去实例化类的实例和管理他们基于容器配置的寿命来减少对

Gradle用户指南(章8:依赖关系管理基础)

章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这些导入的文件视为项目的依赖.第二,gradle需要构建或者打包你的项目产品.我们将这些导出的文件视为项目的发布.下面,让我们在细节上更多的了解这两个方面. 大部分项目都不是完全彻底的独立的.它们需要其他项目的构建文件,以便编译.测试等等.例如,为了在我的项目中使用Hibernate,当编译我的源文件

【转】Unity3D AssetBundles 动态加载游戏资源

AssetBundles are files which you can export from Unity to contain assets of your choice. These files use a proprietary compressed format and can be loaded on demand in your application. This allows you to stream content like models, textures, audio c

Makefile学习7————自动生成依赖关系 三颗星

后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上"objs/"前缀.gcc的-E选项,预处理.在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了.通过-E选项,可以避免生成依赖关系时gcc发出警告,以及提高依赖关系的生成效率. 现在,已经找到自动生成依赖关系的方法了,那么如何将其整合到我们complicated项目的Makefile中呢?自动生成

.NET Framework 版本和依赖关系[微软官方文档]

.NET Framework 版本和依赖关系 微软官方文档: https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies 每个版本的 .NET framework 都包含公共语言运行时 (CLR).基类库和其他托管库. 本主题按版本介绍了 .NET Framework 的关键功能,提供了有关基础 CLR 版本和相关开发环境的信息,并标识了 Windows 操作系统所安装的版

手动创建Maven项目并建立两个项目之间的依赖关系

用命令行快速建立maven项目 -> mvn:archetype:generate -> 直接回车或者自己输入你想生成的 -> groupId ->artifactId ->如果有默认值回车即可 最后 y 确认创建 我们看下他的目录结构 项目名: src ->main ->java ->test ->java pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0"