说明
放在Editor目录下。
播放音效相关
播放音效的组件:UIClickBtnAudioCtr.cs
在该文档中可查看。
Unity中,按钮按下抬起的缩放效果
音乐音效系统
Unity中,基本的音乐音效控制系统(改良)
代码
AddBtnSoundCtr.cs
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using UnityEngine.UI;
public static class AddBtnSoundCtr
{
[MenuItem("Tools/向Btn预制体添加音效控制组件")]
private static void Create()
{
var btnPrefabs = GetPrefabs(go => go.GetComponentInChildren<Button>(true) != null);
foreach (var prefab in btnPrefabs)
{
ModifyPrefab(prefab, go =>
{
var hasModified = false;
var btns = go.GetComponentsInChildren<Button>(true);
foreach (var btn in btns)
{
if (btn.GetComponent<UIClickBtnAudioCtr>() == null)
{
btn.GetOrAddComponent<UIClickBtnAudioCtr>();
if (!hasModified)
{
hasModified = true;
}
}
}
if (hasModified)
{
Debug.Log("修改了预制体:" + go.name);
}
});
}
List<GameObject> GetPrefabs(Func<GameObject, bool> filter)
{
List<GameObject> prefabs = new List<GameObject>();
var resourcesPath = Application.dataPath;
var absolutePaths = System.IO.Directory.GetFiles(resourcesPath, "*.prefab", System.IO.SearchOption.AllDirectories);
for (int i = 0; i < absolutePaths.Length; i++)
{
EditorUtility.DisplayProgressBar("获取预制体……", "获取预制体中……", (float)i / absolutePaths.Length);
string path = "Assets" + absolutePaths[i].Remove(0, resourcesPath.Length);
path = path.Replace("\\", "/");
GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;
if (prefab != null && filter(prefab))
{
prefabs.Add(prefab);
}
}
EditorUtility.ClearProgressBar();
return prefabs;
}
void ModifyPrefab(GameObject prefab, Action<GameObject> modify)
{
var prefabPath = PrefabToPath(prefab);
var instance = PrefabUtility.LoadPrefabContents(prefabPath);
modify(instance);
PrefabUtility.SaveAsPrefabAsset(instance, prefabPath);
PrefabUtility.UnloadPrefabContents(instance);
}
string PrefabToPath(GameObject prefab)
{
string assetPath = AssetDatabase.GetAssetPath(prefab);
return assetPath;
}
}
}