使用工具:VS2017,unity3d

使用语言:c#

作者:Gemini_xujian

参考:siki老师-《丛林战争》视频教程

上一篇文章中,已经完成了注册事件的处理,接下来将完善声音管理器模块。

01-开发声音管理器

为了使游戏运行起来更加富有活力,接下来,我将为游戏添加音效部分,音效部分由AudioManager进行管理。

首先,将工程中的音效相关的文件放到ReSources目录下,目的是方便我们后面通过方法加载相关的音效;之后,打开AudioManager脚本,定义音效文件的父级目录名字,将所有的音效进行声明。

    public const string path_Prefix = "Sounds/";public const string sound_ArrawShoot = "ArrawShoot";public const string sound_Bg_fast = "Bg(fast)";public const string sound_Bg_moderate = "Bg(moderate)";public const string sound_ButtonClick = "ButtonClick";public const string sound_Miss = "Miss";public const string sound_ShootPerson = "ShootPerson";public const string sound_Timer = "Timer";

完成上述操作后,重写Init方法进行初始化相关操作:在方法中,首先创建一个空物体作为音频源管理组件,之后声明两个AudioSource类型的组件,一个是背景音频源,一个是普通音频源,在Init方法中进行赋值,最后需要在方法中调用背景音频源循环播放背景声音,所以在这里,我新创建了一个方法用于声音播放的处理。

private AudioSource bgAudioSource;private AudioSource normalAudioSource;public override void OnInit(){GameObject audioSourceGo = new GameObject("AudioManager");bgAudioSource = audioSourceGo.AddComponent<AudioSource>();normalAudioSource = audioSourceGo.AddComponent<AudioSource>();PlaySound(bgAudioSource, LoadSound(sound_Bg_moderate),0.5f, true);}public void PlaySound(AudioSource audioSource,AudioClip clip,float volume=1,bool loop=false){audioSource.clip = clip;audioSource.volume = volume;audioSource.loop = loop;audioSource.Play();}private AudioClip LoadSound(string soundName){return Resources.Load<AudioClip>(path_Prefix + soundName);}

声音播放处理方法中主要完成的是得到相应的音频源,设置音频源播放的音频片段、声音大小、循环模式、播放功能,设置这几个选项即可完成背景声音的播放,在Init方法中进行调用的时候,新定义了一个方法通过音频名来得到相应的音频片段,这就是刚开始将音频文件放到资源文件夹特定目录的原因。

最后,运行unity,音频正常播放,完整代码如下:

AudioManager.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioManager : BaseManager
{public AudioManager(GameFacade facade) : base(facade){}public const string path_Prefix = "Sounds/";public const string sound_ArrawShoot = "ArrawShoot";public const string sound_Bg_fast = "Bg(fast)";public const string sound_Bg_moderate = "Bg(moderate)";public const string sound_ButtonClick = "ButtonClick";public const string sound_Miss = "Miss";public const string sound_ShootPerson = "ShootPerson";public const string sound_Timer = "Timer";private AudioSource bgAudioSource;private AudioSource normalAudioSource;public override void OnInit(){GameObject audioSourceGo = new GameObject("AudioManager");bgAudioSource = audioSourceGo.AddComponent<AudioSource>();normalAudioSource = audioSourceGo.AddComponent<AudioSource>();PlaySound(bgAudioSource, LoadSound(sound_Bg_moderate),0.5f, true);}public void PlaySound(AudioSource audioSource,AudioClip clip,float volume=1,bool loop=false){audioSource.clip = clip;audioSource.volume = volume;audioSource.loop = loop;audioSource.Play();}private AudioClip LoadSound(string soundName){return Resources.Load<AudioClip>(path_Prefix + soundName);}
}

02-控制按钮的点击声音的播放

上次完成了对背景声音的播放,接下来,对按钮的点击声音进行处理。

首先,AudioManager中新建两个方法,一个是播放背景声音方法,一个是播放普通声音方法,两个方法都调用了PlaySound方法,因为点击按钮时发出的声音不需要循环播放,所以在设置参数的时候设置loop为false。

    public void PlayBgSound(string soundName){PlaySound(bgAudioSource, LoadSound(soundName), 0.5f, true);}public void PlayNormalSound(string soundName){PlaySound(normalAudioSource, LoadSound(soundName));}

之后,在GameFacade脚本中,创建两个方法分别调用以上两个方法,方便其他对象使用。

    public void PlayBgSound(string soundName){audioMng.PlayBgSound(soundName);}public void PlayNormalSound(string soundName){audioMng.PlayNormalSound(soundName);}

接下来,在BasePanel中定义一个按钮点击声音播放的方法,此方法调用中介类GameFacade中的PlayNormalSound方法用于按钮点击声音的播放,但在调用时会发现没有声明Gamefacade对象,所以这时可以仿照BasePanel类中已有的UIManager对象的获取方式获取GameFacade对象,获取到之后即可调用。

UIManager.cs->GetPanel():

            instPanel.GetComponent<BasePanel>().Facade = facade;

BasePanel.cs:

 protected UIManager uiMng;protected GameFacade facade;public UIManager UIMng{set{uiMng = value;}}public GameFacade Facade{set{facade = value;}}protected void PlayClickSound(){facade.PlayNormalSound(AudioManager.sound_ButtonClick);}

最后,分别在StartPanel、LoginPanel、RegisterPanel的按钮点击事件中进行调用即可。

LoginPanel.OnCloseClick():

 public void OnCloseClick(){PlayClickSound();transform.DOScale(0, 0.4f);transform.DOLocalMove(new Vector3(800,0,0), 0.4f).OnComplete(()=> {               uiMng.PopPanel(); });}

unity网络实战开发(丛林战争)-正式开发阶段(018-声音管理器模块的完善)相关推荐

  1. unity网络实战开发(丛林战争)-正式开发阶段(013-游戏服务器端框架搭建)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下游戏服务器端的开发. 01-项目目录结构 ...

  2. unity网络实战开发(丛林战争)-正式开发阶段(014-游戏客户端与服务器端连接搭建)

    使用工具:VS2017,unity3d 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 上一篇文章中,我已经把服务器端的框架进行了搭建,接下来, ...

  3. unity网络实战开发(丛林战争)-正式开发阶段(016-数据库设计以及登录处理)

    使用工具:VS2017,unity3d 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 上一篇文章中,已经完成了游戏场景与开始界面UI的搭建,接 ...

  4. unity网络实战开发(丛林战争)-前期知识准备(012-UI框架开发)

    使用工具:VS2017,Unity2017.3,DoTween插件 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解 ...

  5. unity网络实战开发(丛林战争)-前期知识准备(011-c#连接数据库并实现增删改查以及sql注入问题)

    使用工具:VS2015,Mysql 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下数据库的前期连接准备以及通过 ...

  6. unity网络实战开发(丛林战争)-前期知识准备(004-开发TCP客户端的接收数据和发送数据)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下客户端的接收数据和发送数据. 首先在现有 ...

  7. unity网络实战开发(丛林战争)-前期知识准备(010-在服务器端解析数据)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下在服务器端解析数据. 首先,同前文类同, ...

  8. unity网络实战开发(丛林战争)-前期知识准备(006-修改服务器端开启异步处理客户端连接请求)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下修改服务器开启一步处理客户端连接请求. ...

  9. unity网络实战开发(丛林战争)-前期知识准备(008-粘包和分包及解决方案)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下什么是粘包和分包,以及处理粘包和分包问题 ...

最新文章

  1. Makefile for OpenCV
  2. 窗口消息——Windows核心编程学习手札之二十六
  3. jq php异步上传图片,PHP+Ajax实现图片异步上传预览
  4. 【Python】Python列表基本操作
  5. matlab 自带pca函数,matlab实现主成分分析 princomp函数 PCA中有这个函数
  6. 问题8:NavigationController 自定义返回按钮I
  7. 如何在C中纯粹编写iOS应用程序
  8. leetcode[541]翻转字符串里的单词/reverse words in a string 综合考察了字符串的多种操作
  9. VC编程实现运行Excel宏 Run
  10. php时间戳转换英文格式日期_php中时间戳和日期格式的转换
  11. 图卷积神经网络(GCN)相关应用
  12. oracle为什么主键不唯一,Oracle GoldenGate 针对表没有主键或唯一索引的解决方案
  13. 排序刷默认值sql脚本
  14. 电脑所有的文件打开很慢
  15. js实现简单的视频播放
  16. PBR来龙去脉篇一:光和人眼感知颜色
  17. 【electron】 打包应用修改图标和进程名字
  18. Android开发工程师学习指南
  19. 多目标优化蚁群算法的matlab_混合参数蚁群算法的改进优化
  20. jade基础文档总结

热门文章

  1. 中国省份与城市 app常用省份和城市(2015-4-16日 更新)
  2. 串口485和串口232接线
  3. Java我的2020年终盘点
  4. 金蝶eas税率更新为16%相关功能点
  5. 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测
  6. 【VMware】虚拟机识别USB设备
  7. excel文件下载下来损坏 js_使用exceljs和nodejs下载的xlsx文件正在libreoffice中打开,但在excel 2007中显示已损坏...
  8. 了解Portscan扫描器
  9. 如何制作闪动的gif?一键教你gif闪图在线制作
  10. Parity Game(并查集)