转自彪哥,我稍微略加改动下。。把我自己实现过程中容易犯错的点稍微点下。红字需注意

http://blog.csdn.net/xiebiao360/article/details/14093463

原文如下:

今天有人问我切换场景时背景音乐不能正常播放,于是写了个例子简单测试下,具体如下:

首先创建两个场景,为了区分两个场景(test1.unity & test2.unity)的不同,我们给第一个场景中加一个Cube(可以不建),并新建一个空物体GameObject,附加音频组件AudioSource,拖放音频文件上去,为保证这个空物体在场景切换时不被销毁,我们需要使用DontDestroyOnLoad(object)方法,新建一个C#脚本TestAudio

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class TestAudio : MonoBehaviour {
  4. void Start () {
  5. DontDestroyOnLoad(this.gameObject);
  6. }
  7. }

将此脚本拖放给GameObject,保持GameObject不被Destory掉

二、

再建一个C#脚本TestAudio2,用来绘制GUI进行切换场景

这里我直接贴出我的TestAudio2(我的起名叫audioXieBiao.cs)全部代码图如下

using UnityEngine;
using System.Collections;public class audioXieBiao : MonoBehaviour {public GameObject objPrefabInstantSource;//文章中叫objepublic GameObject musicInstant = null;//文章中叫obj// Use this for initializationvoid Start () {musicInstant = GameObject.FindGameObjectWithTag("sound");if (musicInstant==null){musicInstant = (GameObject)Instantiate(objPrefabInstantSource);}}void OnGUI(){if (GUILayout.Button("Load Level")){if (Application.loadedLevelName == "test1")//关于这个下面有详细介绍{Application.LoadLevel("test2");}else{Application.LoadLevel("test1");}}if (GUI.Button(new Rect(10, 90, 120, 30), "Pause")){musicInstant.audio.Pause();}if (GUI.Button(new Rect(10, 130, 120, 30), "Stop")){musicInstant.audio.Stop();}if (GUI.Button(new Rect(10, 50, 120, 30), "Play")){musicInstant.audio.Play();}}
}
[csharp] view plaincopy
  1. if (GUI.Button(new Rect(10,10,120,30),"load level")) {
  2. if (Application.loadedLevelName=="test1") {
  3. Application.LoadLevel("test2");
  4. }
  5. else {
  6. Application.LoadLevel("test1");
  7. }
  8. }

在这里我们拖放给相机就可以了
另外要注意一个地方,当我们从第一个场景test1切换到test2的时候没有问题,但是从test2切换回test1的时候,场景里会多出一个GameObject,此时会出现两个声音(一个是test1里重新生成的,另一个是我们之前没有销毁的),为了解决这个问题我们把GameObject设为预设,并加个标签sound

编辑TestAudio2中的代码

[csharp] view plaincopy
  1. public GameObject obje;
  2. GameObject obj=null;
  3. // Use this for initialization
  4. void Start () {
  5. obj = GameObject.FindGameObjectWithTag("sound");
  6. if (obj==null) {
  7. obj = (GameObject)Instantiate(obje);
  8. }
  9. }

拖放Project中的预设GameObject到obje(此时hierarchy中只有cube和camera)

运行,切换场景时,背景音乐不间断播放

接下来可以对背景音乐进行控制,如播放,暂停,停止

[csharp] view plaincopy
  1. if (GUI.Button(new Rect(10,90,120,30),"Pause")) {
  2. obj.audio.Pause();
  3. }
  4. if (GUI.Button(new Rect(10,130,120,30),"Stop")) {
  5. obj.audio.Stop();
  6. }
  7. if (GUI.Button(new Rect(10,50,120,30),"Play")) {
  8. obj.audio.Play();
  9. }

附加学习:如何获得场景名称

检验结果为下:

输出为:

  //如何当前场景名称 方法一Debug.Log("方法一:" + Application.loadedLevelName);//当所在为test1.unity时,输出test1,当所在为test2.unity时,输出test2.//方法二string currentSceneName = UnityEditor.EditorApplication.currentScene;//这样输出的是Assert目录下的完整目录:Assets/Scenes/test1.unityDebug.Log("currentSceneName输出为:"+currentSceneName);string[] nameS= currentSceneName.Split('/');Debug.Log("方法一:" + nameS[nameS.Length - 1]);//始终显示test1.unity()

Unity实现 场景切换 音乐不断相关推荐

  1. Unity(13)-场景切换,保留资源

    文章目录 前言 其他介绍 上一篇笔记 一.项目结构 二.脚本 [1]. 场景切换 [2]. 资源保留 前言 在切换场景的时候会删除上一个场景的所有资源,所以需要给需要的游戏对象上挂载脚本,从而保留游戏 ...

  2. Unity(12)-场景切换

    文章目录 前言 其他介绍 上一篇笔记 一.项目结构 二.脚本 [1]. 添加场景 [2]. 绑定脚本 [3]. 代码 [4]. 脚本触发 前言 按下按钮后切换到指定的场景中 其他介绍 微软官方C#函数 ...

  3. 【Unity】场景切换保留数据的解决方案

    PlayerPrefs 类 简介 PlayerPrefs类是 Unity 给我们提供的内置的数据存储类,是以键值对的形式存储数据的(具体可以去Unity官网的文档中看:UnityEngine.Play ...

  4. Unity中通过场景切换但音乐继续播放

    在场景切换的过程中,我们希望场景中的背景音乐继续播放而不是从新播放,这时我们要通过DontDestroyOnLoad(this.gameObject)函数来实现这样的功能; 首先我们新建两个场景,将场 ...

  5. Unity中的场景切换

    Unity中的场景切换 与电影类似,一个游戏往往需要多个场景.而如果场景中资源较少,那么可以很快的完成切换,如果较多的话,可能需要十几秒时间.在这段时间内播放加载动画等等,可以减少玩家的不耐烦. 同步 ...

  6. cocos creator切换场景闪退_#Cocos Creator# 为什么音乐音效在场景切换的时候自动停止了?...

    问题背景 一般来说,每个场景都会有自己的背景音乐,所以,之前我一直没有注意到有什么问题. 直到有一天,我想让游戏从头到尾一直循环播放同一首背景音乐,结果,咦,背景音乐怎么自动停了? 原因 暂时还没有找 ...

  7. Unity游戏开发:场景切换的实现

    在unity中可以将不同场景的背景和道具放置在不同的Scene当中,通过对Scene的加载和卸载来实现场景之间的切换.同时创建一个基础场景(Control Scene)来对整个游戏系统进行管理,在基础 ...

  8. Unity使用设置界面Slider控制音量,场景切换时音量滑条都不改变

    目录 创建设置界面 设置滑条控制音乐 场景切换保证音量不变 关键点就是使用Playerprefs保存和读取音量数据 创建设置界面 上图为Hierarchy视图中的内容,本案例会使用到setting按钮 ...

  9. Unity——通过点击鼠标进行场景切换

    前记 通过点击按钮进行场景切换请参考: unity--通过点击按钮进行场景切换_行秋的博客-CSDN博客1.准备两个示例场景 2.点击File->Build Settings...,将场景添加到 ...

最新文章

  1. 浅谈C/C++中的static和extern关键字
  2. python快速入门第3版 数据_Python 快速入门 第3版
  3. C++ 变量的定义位置
  4. mysql职业要求_为什么面试的每一家都要求掌握MySQL?
  5. 阿波罗登月51周年,程序员用DAIN技术还原阿波罗登月高清影像,效果震撼
  6. 有什么用_app用什么软件编写
  7. 前端学习(653):算数运算符
  8. 绿盟科技鸿蒙系统,华为 X 绿盟科技,打造“云原生安全新生态”
  9. python+ seleniumAPPium自动化 page Object 设计模式
  10. 添加源ubuntu_x64 安装 Adobe Reader
  11. 『不再迷茫 - 正则表达式』JS正则要点梳理 持续更新
  12. sqlServer2005升级到sqlServer2008R2
  13. elasticsearch使用中文分词器和拼音分词器,自定义分词器
  14. java提现功能开发_利用java实现提现金额到支付宝账户的功能
  15. 【预测模型】基于天牛须算法BAS优化BP神经网络实现数据预测matlab代码
  16. 2个相同的 stm32 can通讯不成功_CAN通讯系列--CAN通讯简介1
  17. [转]关于英文中的标点符号
  18. Python快速入门(上)
  19. 从Map、JSONObject取不存在键值对时的异常情况
  20. 单片机独立按键模块(含短按,长按,连发功能)

热门文章

  1. Java实现设计模式之——单例模式
  2. 酷6网李善友主题演讲:创业与哲学
  3. vue-element-admin安装时报错
  4. 【跨年】《2020年跨年演讲合集-吴晓波、罗振宇、丁祖昱等》(附下载链接)...
  5. 【原创】深度学习第7弹:小D识数字(MNIST手写数字集)
  6. linux指定分区label,Linux_Linux中分区挂载和LABEL的指定,让Linux开机就挂载分区,我知 - phpStudy...
  7. 20175227张雪莹 2018-2019-2 《Java程序设计》第三周学习总结
  8. 访问我在BLOGBUS的博客吧
  9. VBA入门到进阶常用知识代码总结43
  10. 操作系统 — 竞争条件