前段时间策划们想知道UI预制件中使用了哪些音效
N多预制件、N多音效!!
如果纯人工整理的话这还不累成狗?
累成狗不说,还容易出错
所以获取音频剪辑小工具就诞生了,将策划从死亡边缘拉了回来
我们先看一下相关API手册:http://game.ceeger.com/Script/EditorUtility/EditorUtility.CollectDependencies.html
这玩意可好用了,之前也用它做过获取预制件公共资源工具
看看名字:“收集依赖关系”
那还不简单明了了,有依赖关系的东西都能获取过来嘛
我写了个方法,支持获取任意类型
这个方法你可以直接copy去用,不用自己写的。
使用方法也很简单,在这里我提供一个完整的获取预制件音频剪辑的例子。上代码咯
#region HeadComments
/* ========================================================================
* Copyright (C) 2015 Arthun
*
* 作 者:Arthun
* 文件名称:ArthunTools
* 功 能:升哥哥工具包
* 创建时间:2015/09/11 2:15:20
* 版 本:v1.0.0
*
* [修改日志]
* 修改者: 时间: 修改内容:
*
* =========================================================================
*/
#endregion using System.Collections.Generic;
using UnityEditor;
using UnityEngine; public class ArthunTools : EditorWindow
{
/// 音频剪辑信息 <summary>
///
/// </summary>
public class AudioClipInfo
{
public string prefab = "";
public string audio = "";
} /// 选中预制件(可多选)后按 Alt + G 键获取 <summary>
///
/// </summary>
[MenuItem("Arthun Tools/Get Select Prefabs Info &G")]
static void GetSelectPrefab()
{
GameObject[] gos = Selection.gameObjects; Debug.Log("getCount:" + gos.Length.ToString()); if (gos.Length == )
return; List<AudioClipInfo> audioClipsInfo = new List<AudioClipInfo>();
foreach (GameObject go in gos)
{
#region 依赖关系获取音频
List<AudioClip> audioClips = GetPrefabDepe<AudioClip>(go); foreach (AudioClip ac in audioClips)
{
if (ac != null)
{
AudioClipInfo info = new AudioClipInfo();
info.prefab = go.name;
info.audio = ac.name;
audioClipsInfo.Add(info);
}
}
#endregion
} foreach (AudioClipInfo info in audioClipsInfo)
{
Debug.Log(string.Format("prefab:{0} audio:{1}", info.prefab, info.audio));
} Debug.Log("soundCount:" + audioClipsInfo.Count.ToString());
} /// 获取预制件依赖 <summary>
///
/// </summary>
/// <typeparam name="T">欲获取的类型</typeparam>
/// <param name="go"></param>
/// <returns></returns>
static List<T> GetPrefabDepe<T>(GameObject go)
{
List<T> results = new List<T>();
Object[] roots = new Object[] { go };
Object[] dependObjs = EditorUtility.CollectDependencies(roots);
foreach (Object dependObj in dependObjs)
{
if (dependObj != null && dependObj.GetType() == typeof(T))
{
results.Add((T)System.Convert.ChangeType(dependObj, typeof(T)));
}
} return results;
}
}
文中不足之处欢迎批评指正
本文链接:http://www.cnblogs.com/shenggege/p/4799801.html