Unity3d5.0之后关于游戏音乐的管理

首先这里我们只要把这个游戏管理器做成预制件,然后写一个通用模板类(包括关闭音乐和开启音乐,关闭音效和开启音效,和游戏存档来开启关闭音乐)挂在这个预制件上面。

通用模板类:

using UnityEngine;

using System.Collections;

public class AudioPlayer : MonoBehaviour{

static public AudioPlayer s_Instance = null;

static public bool IsRetargetOK=true;

//播放音效一次

static public void PlayAudioOnce(string name){

if (PlayerPrefs.HasKey("Audio") && PlayerPrefs.GetInt("Audio") == 0) {

return;

} //这里是存档来开启音乐

if (s_Instance != null){

AudioSource[] audioSource = s_Instance.gameObject.GetComponents<AudioSource>();

bool isPlayOk = true;

foreach (var item in audioSource){

if (item.clip != null && item.clip.name == name&&item.isPlaying){

isPlayOk = false;

break;

}

}

if (isPlayOk){

audioSource[s_Instance.currentAudioIndex].clip = Util.LoadResource<AudioClip>("Sounds/" + name + ".mp3");  //这里是加载你的游戏音乐,这里自己写了一个动态加载资源的办法,方便后面资源打包

audioSource[s_Instance.currentAudioIndex].Play();

s_Instance.currentAudioIndex++;

if (s_Instance.currentAudioIndex > AudioPlayer.kAudioCount){

s_Instance.currentAudioIndex = 1;

}

}else{

}

}

}

//播放音效

static public void PlayAudio(string name){

if (PlayerPrefs.HasKey("Audio") && PlayerPrefs.GetInt("Audio") == 0){

return;

}

if (s_Instance != null){

AudioSource[] audioSource = s_Instance.gameObject.GetComponents<AudioSource>();

audioSource[s_Instance.currentAudioIndex].clip = Util.LoadResource<AudioClip>("Sounds/" + name + ".mp3");

audioSource[s_Instance.currentAudioIndex].Play();

s_Instance.currentAudioIndex++;

if (s_Instance.currentAudioIndex > AudioPlayer.kAudioCount)

{

s_Instance.currentAudioIndex = 1;

}

}

}

//播放音乐

static public void PlayMusic(string name){

if (PlayerPrefs.HasKey("Music") && PlayerPrefs.GetInt("Music") == 0){

return;

}

if (s_Instance != null) {

AudioSource[] audioSource = s_Instance.gameObject.GetComponents<AudioSource>();

audioSource[0].clip = Util.LoadResource<AudioClip>("Sounds/" + name + ".mp3");

audioSource[0].Play();

}

}

//方便其他脚本调用这个播放音乐的方法

static public void PlayCurrentMusic(){

if (s_Instance != null) {

PlayMusic(s_Instance.MusicName);

}

}

//关闭音乐

static public void CloseMusic(){

if (s_Instance != null){

AudioSource[] audioSource = s_Instance.gameObject.GetComponents<AudioSource>();

audioSource[0].Stop();

}

}

private int currentAudioIndex = 1;

public const int kAudioCount = 31;

public string MusicName = "";

//单例模式

void Awake(){

s_Instance = this;

}

//游戏刚安装的时候一进来先播放音乐

void Start(){

AudioPlayer.PlayMusic(MusicName);

}

}

游戏存档代码:

using UnityEngine;

using System.Collections;

using System;

public class SetCanvas : MonoBehaviour

{

public GameObject BtONMusic;

public GameObject BtOFFMusic;

public GameObject BtONAudio;

public GameObject BtOFFAudio;

void Start()

{

if (PlayerPrefs.HasKey("Music") && PlayerPrefs.GetInt("Music") == 0)

{

BtOFFMusic.SetActive(true);

BtONMusic.SetActive(false);

}

else if (PlayerPrefs.HasKey("Music") && PlayerPrefs.GetInt("Music") == 1)

{

BtONMusic.SetActive(true);

BtOFFMusic.SetActive(false);

}

else

{

BtONMusic.SetActive(true);

BtOFFMusic.SetActive(false);

}

if (PlayerPrefs.HasKey("Audio") && PlayerPrefs.GetInt("Audio") == 0)

{

BtOFFAudio.SetActive(true);

BtONAudio.SetActive(false);

}

else if (PlayerPrefs.HasKey("Audio") && PlayerPrefs.GetInt("Audio") == 1)

{

BtOFFAudio.SetActive(false);

BtONAudio.SetActive(true);

}

else

{

BtONAudio.SetActive(true);

BtOFFAudio.SetActive(false);

}

}

public void CloseMusic()

{

PlayerPrefs.SetInt("Music", 0);

AudioPlayer.CloseMusic();

BtOFFMusic.SetActive(true);

BtONMusic.SetActive(false);

}

public void OpenMusic()

{

PlayerPrefs.SetInt("Music", 1);

AudioPlayer.PlayCurrentMusic();

BtOFFMusic.SetActive(false);

BtONMusic.SetActive(true);

}

public void CloseAudio()

{

PlayerPrefs.SetInt("Audio", 0);

BtOFFAudio.SetActive(true);

BtONAudio.SetActive(false);

}

public void OpenAudio()

{

PlayerPrefs.SetInt("Audio", 1);

BtOFFAudio.SetActive(false);

BtONAudio.SetActive(true);

}

public void ColseUI()

{

gameObject.SetActive(false);

}

}

现在任何地方想要关闭或者开启音乐音效的时候就可以调用这个游戏管理类里面的

AudioPlayer.PlayCurrentMusic();开启音乐

AudioPlayer.CloseMusic();关闭音乐

时间: 2024-10-11 11:14:32

Unity3d5.0之后关于游戏音乐的管理的相关文章

游戏音乐制作随谈

这一次来讲一讲游戏的音乐制作 什么音乐才是游戏需要的?真实,有代入感,游戏音乐策划要了解不同乐器及音乐特点知识,根据不同游戏题材内容和情绪选择相应需求的音乐类型. 休闲游戏配乐相对时尚,现代,欢快,轻松,让玩家体验上放松娱乐.乐器的选择上,也常用吉他,贝斯,键盘和架子鼓等.当然游戏的可玩性还是至关重要,操作要有爽快感,节奏感,声音的烘托恰当会将游戏的档次得到一个提升,再加上视觉和听觉的配合. 游戏音乐大致可以分为如下几个部分: 1.环境音乐:包括人文场景,自然环境音.网上有很多相关素材音效音乐包

Taitherm (ex-Radtherm) v12.0.0 Win64 &amp; Linux64 2CD高级热管理设计与分析

Taitherm (ex-Radtherm) v12.0.0 Win64 & Linux64 2CD高级热管理设计与分析工一款用于计算辐射视角系数和阳光照射的先进光线跟踪技术,是新一代高级热管理设计与分析工具,堪称目前市场上最快的辐射换热求解器之 一.在近20年前,ThermoAnalytics的创始人设计了只能用于放射和辐射的求解器,被命名为RadTherm.在过去的二十年中,这款软件已经发 展到了支持分析计算所有的热传递模式:辐射.传导.对流.以及平流等.正如发布的Taitherm (ex-

《逃离牧场v1.0》android游戏豌豆荚首发庆,快来看看吧!!!

<逃离牧场>是快开客的又 一创意,玩家通过躲避炮台 子弹全身而退地到达屏幕上 方的亭子的位子,游戏成功! 如果被打中次数超过3次,游 戏失败!,如有疑问,欢迎 建议我! QQ:923780263 微信公众号:QuickDev助手 博客:http://blog.csdn.net/ qq923780263 豌豆荚下载地址:apps.wandoujia.com/apps/com.lxc.taolimuchang.wdj <逃离牧场v1.0>android游戏豌豆荚首发庆,快来看看吧!!!

【用django2.0来开发】 后台会员管理

[用django2.0来开发] 后台会员管理 项目地址:https://gitee.com/ccnv07/django_example这一篇主要是要完成django 后台的会员管理功能, 会涉及到model, ModelAdmin, admin, Form等多个方面, 所以会讲的比较细 创建会员模块 cd cms python manage.py startapp account python manage.py startapp 是创建一个模块 至于模块的定义, 每个人都有不同的看法, 有些是

creator2.0.2 native游戏截屏微信分享

cocos creator 2.0.2后 游戏内截屏,native微信SDK分享代码: public static wxShareScreenShot(sType: number) { let node = new cc.Node(); node.parent = cc.director.getScene(); node.width = cc.view.getVisibleSize().width; node.x = cc.view.getVisibleSize().height; node.y

【一个开发设想】开发一个游戏向时间管理APP

什么是游戏向时间管理呢? 首先我们要做的是时间管理.为了更好地利用时间,摆脱拖延症. 其次是游戏向.就是利用主线任务.支线任务.每日任务的方式展现,一般来讲,没人会讨厌玩游戏.更何况玩这个“游戏”是为了更好的提升自己呢. 主线任务是你必须要做的事. 支线任务的优先级低于主线,可作为后备. 每日任务是你每天要完成的事,更适合做一些为了能养成习惯的事. 主线与支线任务未完成的被一直在app图标右上角有个数量提示,隐式催促你完成任务. 原文地址:https://www.cnblogs.com/wuha

【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)

在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 MediaPlayer, 而用于游戏音效的则是 SoundPool 类. 1. MediaPlayer MediaPlayer 实例化不是 new 出来的,而是通过调用静态方法得到的,这里有几种静态方法: create(Context context, Uri uri) 作用:通过Uri创建一个多

cocos2dx3.0戳青蛙游戏(打地鼠)

1戳青蛙项目描述 1.1功能描述 实现类似打地鼠游戏,青蛙随机出现在屏幕左边5*3的格子中,并会向屏幕右边移动,在青蛙逃离之前,手指点击实现戳灭青蛙的效果.随着分数增加,青蛙越来越多,当青蛙逃离5个后,游戏结束.青蛙分为大青蛙和小青蛙,大青蛙走的忙,要点击3下,小青蛙走的快,只需点击两下. 1.2所需技术 Cocos2D-x精灵类,动作类,多点触摸,CocoStudioUI编辑器,Vector 2戳青蛙运行流程 3戳青蛙详细设计 3.1实体基类 class CEntity : public No

Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m中新建一个移动方法,内容如下,其中考虑了与地图的碰撞情况: -(void)moveTowardOneTile:(CGPoint)location{ CGPoint diff = ccpSub(location, self.position); CGPoint desiredTileCoord = [