Unity中游戏的声音管理
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;
}
}
Unity中游戏的声音管理的更多相关文章
- 关于Unity中的碰撞检测和管理(2D)
创建Unity3D项目和Unity2D项目的区别. 1.3D项目有摄像机和太阳光,2D项目只有摄像机 2.3D项目使用的贴图类型是Texture纹理,2D项目使用的贴图类型是Sprite 2D/UI ...
- 关于Unity中的声音管理模块(专题七)
声音的要素 1: 音频文件AudioClip2: 音源AudioSource;3: 耳朵AudioListener;//全局只能有一个4: 2D/3D音频;//2D只是简单地播放声音,3D可以根据距离 ...
- 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- Html5 Egret游戏开发 成语大挑战(九)设置界面和声音管理
在上一篇中,简单的使用界面元素快速实现了一个游戏中的二级页面,这种直接在游戏页面上做UI的做法并不太好,原因是,UI会让游戏的压力变大,即使它是隐蔽的,如果同样的功能在其它的地方也是一样的,那么就要写 ...
- 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是 ...
- Unity中实现全局管理类的几种方式
(搬运自我在SegmentFault的博客) 如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合 ...
- Unity中制作游戏的快照游戏支持玩家拍快照
Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...
- Unity制作游戏中的场景
Unity制作游戏中的场景 1.2.3 场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...
- 【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现
RT,马三最近在参与一款足球游戏的开发,其中涉及到足球的各种运动轨迹和路径,比如射门的轨迹,高吊球,香蕉球的轨迹.最早的版本中马三是使用物理引擎加力的方式实现的足球各种运动,后来的版本中使用了根据物理 ...
随机推荐
- excle表格生成网页
用Dreamweaver可以方便生成和excle表格一样的代码. 复制excle,粘贴
- i.Windows下APR安装过程
1.下载安装native Windows下的APR安装和配置比较简单,可以直接下载Tomcat-native的二进制的版本包: 下载之后的目录结构为: tcnative-1.dll这个库已经包含了AP ...
- vs2015打包winform程序遇到的一系列问题
1.因为打包的时候用的是release版本的东西,所以就先把项目按release编译一下,然后一大波bug,后来修改了生成目标平台为x86,我的解决方案里面加上安装部署项目共5个(ui配置:活动rel ...
- ArcGIS操作Excel文件没有注册类解决办法
在ArcGIS Desktop中进行表连接时选择了一张excel表,但添加该表时报错: 原因是机器上缺少Office的数据驱动. ArcGIS 支持 : Excel 2003 以及更早版本的 .xls ...
- PHP浮点数计算
涉及到计算 和金额交易 使用bc系列函数 高精度计算 不会有0.57不精确的问题
- php file_get_contents() 用法
php 需要访问某个网页 <?php $fh= file_get_contents('http://www.baidu.com/'); echo $fh; ?> 知识扩充 file_get ...
- spring开发的总结
1,当出现无法创建bean,( Error creating bean with name 'fileUploadService': Injection of resource dependencie ...
- 学习solr
1.下载地址 http://apache.opencas.org/lucene/solr/
- 【JavaScript】固定布局轮播图特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux系统中查看系统位数(转载)
查看系统多少位网上很多种说话 ### getconf WORD_BIT 错误的 这3个是对的 getconf LONG_BIT echo $HOSTTYPE uname -a ...