unity框架研究之音频管理部分(1)
2016-10-10 14:53
274 查看
代码内容不是本人原创的,请原谅我斗胆作为原创发表:
首先是存放声音的脚本SoundBank(声音银行),是用一个类来存放声音:
,请注意,这个类是序列话了的!!!并且不用继承MonoBehaviour
然后下面就是声音图书馆(SoundLibrary),这个是继承MonoBehaviour,并且把SoundBank序列号后当做变量来使用,就像这样
这样就可以很好的保存声音了,想使用哪一个或者哪一类声音就很方便了,下面是全部的代码:
得益于音频管理着一部分代码所带来的编程思路,对我当前项目的帮助起到了极其重要的作用!
接下来还有:SoundEvent,SoundController,SoundManager三个类
首先是存放声音的脚本SoundBank(声音银行),是用一个类来存放声音:
,请注意,这个类是序列话了的!!!并且不用继承MonoBehaviour
using UnityEngine; using System.Collections; using System.Collections.Generic; [System.Serializable] public class SoundBank { public string name; public AudioClip[] sounds; List<AudioClip> soundsList = new List<AudioClip>();//声音列表 /// <summary> /// 初始化声音列表 /// </summary> void FillList() { foreach( AudioClip clip in sounds ) { soundsList.Add(clip); } } /// <summary> /// 获得一个声音 /// </summary> /// <returns></returns> public AudioClip GetRandomClip() { if ( soundsList.Count == 0 ) { FillList(); } if ( soundsList.Count > 0 ) { AudioClip clip = soundsList[0]; soundsList.RemoveAt(0); return clip; } /*if ( _sounds.Length == 1 ) { return _sounds[0]; } else if ( _sounds.Length > 0 ) { int ind = Random.Range( 0, _sounds.Length ); return _sounds[ind]; }*/ return null; } /// <summary> /// 获得指定的声音Z /// </summary> /// <param name="index"></param> /// <returns></returns> public AudioClip GetClip( int index ) { if ( index < sounds.Length ) { return sounds[index]; } return null; } }
然后下面就是声音图书馆(SoundLibrary),这个是继承MonoBehaviour,并且把SoundBank序列号后当做变量来使用,就像这样
[SerializeField] SoundBank[] soundLibrary; Dictionary<string, SoundBank> soundLibraryDict = new Dictionary<string, SoundBank>();
这样就可以很好的保存声音了,想使用哪一个或者哪一类声音就很方便了,下面是全部的代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 声音图书馆的形成,建立一个用于存放声音的bank,
/// 里面有声音的源文件和获得该声音的方法等(不必继承MonoBehaviour)
/// </summary>
public class SoundLibrary : MonoBehaviour
{
[SerializeField] SoundBank[] soundLibrary; Dictionary<string, SoundBank> soundLibraryDict = new Dictionary<string, SoundBank>();
public SoundBank[] banks
{
get { return soundLibrary; }
}
// Use this for initialization
public void Init()
{
GenerateDictionary();
}
/// <summary>
/// 初始化声音字典
/// </summary>
void GenerateDictionary()
{
soundLibraryDict = new Dictionary<string, SoundBank>();
if (soundLibrary != null)
{
foreach (SoundBank s in soundLibrary)
{
soundLibraryDict.Add(s.name, s);
}
}
}
/// <summary>
/// 通过声音的名字获取对应的声音(SoundBank.GetRandomClip)
/// </summary>
/// <param name="soundName"></param>
/// <returns></returns>
public AudioClip GetSoundFromLibrary(string soundName)
{
if (soundLibraryDict.ContainsKey(soundName))
{
return soundLibraryDict[soundName].GetRandomClip();
}
return null;
}
public void MergeLibraries(SoundLibrary[] libraries)
{
List<SoundBank> newBanks = new List<SoundBank>();
if (soundLibrary != null)
{
newBanks.AddRange(soundLibrary);
}
foreach (SoundLibrary sl in libraries)
{
newBanks.AddRange(sl.soundLibrary);
}
soundLibrary = newBanks.ToArray();
GenerateDictionary();
}
public void RemoveLibrary(SoundLibrary library)
{
List<SoundBank> oldBanks = new List<SoundBank>();
if (soundLibrary != null)
{
oldBanks.AddRange(soundLibrary);
}
foreach (SoundBank bank in library.soundLibrary)
{
foreach (SoundBank oldBank in oldBanks)
{
if (oldBank.name == bank.name)
{
oldBanks.Remove(oldBank);
break;
}
}
}
soundLibrary = oldBanks.ToArray();
GenerateDictionary();
}
}
得益于音频管理着一部分代码所带来的编程思路,对我当前项目的帮助起到了极其重要的作用!
接下来还有:SoundEvent,SoundController,SoundManager三个类
相关文章推荐
- IT风险管理研究框架
- 部分ASP.NET AJAX框架研究资料汇编
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
- 【Web探索之旅】第二部分第三课:框架和内容管理系统
- 【Web探索之旅】第二部分第三课:框架和内容管理系统
- SOA 事务管理,第 2 部分:原型事务协调框架
- Unity手游框架之 资源管理
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分 推荐
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
- ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
- 基于push技术的web实时网络管理框架研究
- [转]Unity——Export/Import Package功能和项目管理的研究
- 第四篇 ANDROID窗口管理服务实现机制 窗口管理是ANDROID框架一个重要部分,主要包括如下功能: (1)Z-ordered的维护 (2)窗口的创建、销
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
- 支付宝中当面付的通过音频传输数据的研究-实现部分(2)
- 基于GIS的省级高速公路路面管理系统框架研究
- Unity——Export/Import Package功能和项目管理的研究
- 支付宝中当面付的通过音频传输数据的研究-实现部分(2)
- Unity——Export/Import Package功能和项目管理的研究
- Unity框架——资源管理