好贷网好贷款

Unity实现 场景切换 音乐不断

发布时间:2016-12-4 12:04:45 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Unity实现 场景切换 音乐不断",主要涉及到Unity实现 场景切换 音乐不断方面的内容,对于Unity实现 场景切换 音乐不断感兴趣的同学可以参考一下。

转自彪哥,我稍微略加改动下。。把我自己实现过程中容易犯错的点稍微点下。红字需注意 http://blog.csdn.net/xiebiao360/article/details/14093463 原文如下: 今天有人问我切换场景时背景音乐不能正常播放,于是写了个例子简单测试下,具体如下: 一 首先创建两个场景,为了区分两个场景(test1.unity & test2.unity)的不同,我们给第一个场景中加一个Cube(可以不建),并新建一个空物体GameObject,附加音频组件AudioSource,拖放音频文件上去,为保证这个空物体在场景切换时不被销毁,我们需要使用DontDestroyOnLoad(object)方法,新建一个C#脚本TestAudio [csharp] view plaincopy using UnityEngine;   using System.Collections;     public class TestAudio : MonoBehaviour {         void Start () {       DontDestroyOnLoad(this.gameObject);       }         }   将此脚本拖放给GameObject,保持GameObject不被Destory掉 二、 再建一个C#脚本TestAudio2,用来绘制GUI进行切换场景 这里我直接贴出我的TestAudio2(我的起名叫audioXieBiao.cs)全部代码图如下 using UnityEngine; using System.Collections; public class audioXieBiao : MonoBehaviour { public GameObject objPrefabInstantSource;//文章中叫obje public GameObject musicInstant = null;//文章中叫obj // Use this for initialization void 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 if (GUI.Button(new Rect(10,10,120,30),"load level")) {       if (Application.loadedLevelName=="test1") {           Application.LoadLevel("test2");       }       else {           Application.LoadLevel("test1");       }   }   在这里我们拖放给相机就可以了 另外要注意一个地方,当我们从第一个场景test1切换到test2的时候没有问题,但是从test2切换回test1的时候,场景里会多出一个GameObject,此时会出现两个声音(一个是test1里重新生成的,另一个是我们之前没有销毁的),为了解决这个问题我们把GameObject设为预设,并加个标签sound 编辑TestAudio2中的代码 [csharp] view plaincopy public GameObject obje;   GameObject obj=null;   // Use this for initialization   void Start () {       obj = GameObject.FindGameObjectWithTag("sound");       if (obj==null) {           obj = (GameObject)Instantiate(obje);       }      }   拖放Project中的预设GameObject到obje(此时hierarchy中只有cube和camera) 运行,切换场景时,背景音乐不间断播放 接下来可以对背景音乐进行控制,如播放,暂停,停止 [csharp] view plaincopy if (GUI.Button(new Rect(10,90,120,30),"Pause")) {       obj.audio.Pause();   }   if (GUI.Button(new Rect(10,130,120,30),"Stop")) {       obj.audio.Stop();   }   if (GUI.Button(new Rect(10,50,120,30),"Play")) {       obj.audio.Play();   }   附加学习:如何获得场景名称  检验结果为下: 输出为: //如何当前场景名称 方法一 Debug.Log("方法一:" + Application.loadedLevelName);//当所在为test1.unity时,输出test1,当所在为test2.unity时,输出test2. //方法二 string currentSceneName = UnityEditor.EditorApplication.currentScene;//这样输出的是Assert目录下的完整目录:Assets/Scenes/test1.unity Debug.Log("currentSceneName输出为:"+currentSceneName); string[] nameS= currentSceneName.Split('/'); Debug.Log("方法一:" + nameS[nameS.Length - 1]);//始终显示test1.unity() 好了,看到这,辛苦你了,大家帮帮忙,注册下号,有大用的(点击我的链接进入注册即可): 你想淘宝省钱么?你是淘宝达人么?现在有个好机会就可以在购物的同时,即可省下一大笔钱。。赶紧来看看吧。。 点我进入畅返网(淘宝购物返现网) MadeByLuckyDog

上一篇:WINS客户端修改NetBios节点类型
下一篇:CDialogBar的创建和使用

相关文章

相关评论