Unity中游戏的声音管理
2015-08-10 14:43
519 查看
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 用来管理音频的各种播放方式
/// --------------修改-----------------
/// 修改播放音量会根据gamedata里面的设置进行变化
/// </summary>
public class AudioManager : Singleton<AudioManager>
{
/// <summary>
/// 在指定位置播放剪辑。播放完成后自动消除音频源。
/// </summary>
/// <param name="clip">音频剪辑</param>
/// <param name="position">播放音效的3D空间位置</param>
/// <param name="volume">音量大小</param>
public void PlayAudioClip(AudioClip clip, Vector3 position, float volume)
{
AudioSource.PlayClipAtPoint(clip, position, volume);
}
/// <summary>
/// 在指定位置播放剪辑
/// </summary>
/// <param name="clip"></param>
/// <param name="emitter"></param>
/// <returns></returns>
public AudioSource PlayAudioClip(AudioClip clip)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, Camera.mainCamera.transform, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, bool isLoop)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, Camera.mainCamera.transform, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, isLoop);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume, float pitch)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, pitch, false);
}
/// <summary>
/// 创建一个空物体并且附加一个AudioSource组件来播放音效,
/// 并且需要给它传递一个transform给他作为播放的位置,
/// 播放完毕后自动删除
/// </summary>
/// <param name="clip">音频剪辑引用</param>
/// <param name="emitter"></param>
/// <param name="volume"></param>
/// <param name="pitch"></param>
/// <param name="isLoop">是否循环</param>
/// <returns>音频源</returns>
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume, float pitch, bool isLoop)
{
//Create an empty game object
GameObject go = new GameObject("Audio: " + clip.name);
go.transform.position = emitter.position;
go.transform.parent = emitter;
//Create the source
AudioSource source = go.AddComponent<AudioSource>();
source.clip = clip;
source.volume = 1f * GameData.instance.GetGameSettingData().waitVolum / 100;
source.pitch = pitch;
source.loop = isLoop;
source.Play();
if (!isLoop) Destroy(go, clip.length);
return source;
}
/// <summary>
/// 停止播放当前剪辑,并且删除gameObject
/// </summary>
/// <param name="audioSource"></param>
public void StopAudioClip(AudioSource audioSource)
{
if (audioSource == null) return;
audioSource.Stop();
audioSource.clip = null;
//Debug.Log("删除" + audioSource.gameObject.name);
Destroy(audioSource.gameObject);
}
/// <summary>
/// 指定位置播放剪辑。播放完成后自动消除音频源。
/// 进一步控制播放
/// </summary>
/// <param name="clip">音频剪辑</param>
/// <param name="position">播放音效的3D空间位置</param>
/// <param name="volume">音量大小</param>
/// <returns></returns>
public AudioSource PlayAudioClip(AudioClip clip, Vector3 position, float volume, float pitch, bool isLoop)
{
//Create an empty game object
GameObject go = new GameObject("Audio: " + clip.name);
go.transform.position = position;
AudioSource source = go.AddComponent<AudioSource>();
source.clip = clip;
source.volume = volume;
source.pitch = pitch;
source.Play();
source.loop = isLoop;
if (!isLoop) Destroy(go, clip.length);
return source;
}
}
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 用来管理音频的各种播放方式
/// --------------修改-----------------
/// 修改播放音量会根据gamedata里面的设置进行变化
/// </summary>
public class AudioManager : Singleton<AudioManager>
{
/// <summary>
/// 在指定位置播放剪辑。播放完成后自动消除音频源。
/// </summary>
/// <param name="clip">音频剪辑</param>
/// <param name="position">播放音效的3D空间位置</param>
/// <param name="volume">音量大小</param>
public void PlayAudioClip(AudioClip clip, Vector3 position, float volume)
{
AudioSource.PlayClipAtPoint(clip, position, volume);
}
/// <summary>
/// 在指定位置播放剪辑
/// </summary>
/// <param name="clip"></param>
/// <param name="emitter"></param>
/// <returns></returns>
public AudioSource PlayAudioClip(AudioClip clip)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, Camera.mainCamera.transform, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, bool isLoop)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, Camera.mainCamera.transform, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, isLoop);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, 1f, false);
}
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume, float pitch)
{
//Debug.Log(this.name + "音量大小为" + 1f * GameData.instance.GetGameSettingData().gameVolum / 100);
return PlayAudioClip(clip, emitter, 1f * GameData.instance.GetGameSettingData().gameVolum / 100, pitch, false);
}
/// <summary>
/// 创建一个空物体并且附加一个AudioSource组件来播放音效,
/// 并且需要给它传递一个transform给他作为播放的位置,
/// 播放完毕后自动删除
/// </summary>
/// <param name="clip">音频剪辑引用</param>
/// <param name="emitter"></param>
/// <param name="volume"></param>
/// <param name="pitch"></param>
/// <param name="isLoop">是否循环</param>
/// <returns>音频源</returns>
public AudioSource PlayAudioClip(AudioClip clip, Transform emitter, float volume, float pitch, bool isLoop)
{
//Create an empty game object
GameObject go = new GameObject("Audio: " + clip.name);
go.transform.position = emitter.position;
go.transform.parent = emitter;
//Create the source
AudioSource source = go.AddComponent<AudioSource>();
source.clip = clip;
source.volume = 1f * GameData.instance.GetGameSettingData().waitVolum / 100;
source.pitch = pitch;
source.loop = isLoop;
source.Play();
if (!isLoop) Destroy(go, clip.length);
return source;
}
/// <summary>
/// 停止播放当前剪辑,并且删除gameObject
/// </summary>
/// <param name="audioSource"></param>
public void StopAudioClip(AudioSource audioSource)
{
if (audioSource == null) return;
audioSource.Stop();
audioSource.clip = null;
//Debug.Log("删除" + audioSource.gameObject.name);
Destroy(audioSource.gameObject);
}
/// <summary>
/// 指定位置播放剪辑。播放完成后自动消除音频源。
/// 进一步控制播放
/// </summary>
/// <param name="clip">音频剪辑</param>
/// <param name="position">播放音效的3D空间位置</param>
/// <param name="volume">音量大小</param>
/// <returns></returns>
public AudioSource PlayAudioClip(AudioClip clip, Vector3 position, float volume, float pitch, bool isLoop)
{
//Create an empty game object
GameObject go = new GameObject("Audio: " + clip.name);
go.transform.position = position;
AudioSource source = go.AddComponent<AudioSource>();
source.clip = clip;
source.volume = volume;
source.pitch = pitch;
source.Play();
source.loop = isLoop;
if (!isLoop) Destroy(go, clip.length);
return source;
}
}
相关文章推荐
- Unity ShaderLab< 一> 学习总结
- Unity3D ShaderLab<二>Shader属性
- UNITY3D学习笔记12
- Unity3D根据游戏的发展Terrain Toolkit地形生产
- unity, write/read txt file
- compiz使Ubuntu unity桌面消失
- 【unity填坑日记】Array[] Contains导致IOS AOT编译错误
- 实现一个简单的Unity3D三皮卡——3D Picking (1)
- unity3d 圆形遮罩
- 【Unity手册】着色器参考
- Unity3D和网页数据交互的基本原理
- Unity3D 灰度shader(改编自NGUI)
- Unity3D占用内存太大的解决方法
- Unity 3D中的内存管理
- 【Unity3d开发基础】场景中物体的变换
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
- 我的大学之unity3D
- unity3d碰撞检测之立方体碰撞算法
- unity界面学习01
- Scut游戏server引擎Unity3d访问