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

你可能感兴趣的:(unity3d 依赖关系获取预制件任意资源)