zoukankan      html  css  js  c++  java
  • unity3d切换场景时,背景音乐保持播放

    首先创建两个场景: One,Two

    再创建一个空游戏对象: GameObject,并添加AudioSource组件,把要播放的音乐拖放进去

    给GameObject添加脚本AlwayAudio,代码如下:

    1 using UnityEngine;
    2 using System.Collections;
    3 
    4 public class AlwayAudio : MonoBehaviour {
    5 
    6     void Start () {
    7         DontDestroyOnLoad(this.gameObject);
    8     }
    9 }
    保持GameObject不被销毁的代码

    再来创建一个脚本AlwayAudio2,用于切换场景,此脚本放到摄像机即可:
    代码如下:

    1 if (GUI.Button(new Rect(10,10,120,30),"load level")) {
    2     if (Application.loadedLevelName=="One") {
    3         Application.LoadLevel("Two");
    4     }
    5     else {
    6         Application.LoadLevel("One");
    7     }
    8 }
    切换场景代码

    到这里已经可以从One到Two切换时没有问题,但是切换回来的时候会出现两个声音,一个是One重新生成的,另一个是没有被销毁的,为了解决这个问题我们把GameObject设置成预设,并添加个标签(tag):sound, 修改第二个脚本 , 添加如下代码 :

    1 public GameObject obje;
    2 GameObject obj=null;
    3 
    4 void Start () {
    5     obj = GameObject.FindGameObjectWithTag("sound");
    6     if (obj==null) {
    7         obj = (GameObject)Instantiate(obje);
    8     }   
    9 }
    修改第二个脚本的代码

    这个时候,把预设拖放给obje,把场景中的GameObject删掉

    这样在场景One和Two之间切换已经没有问题了

    来自:开发者社区

  • 相关阅读:
    链接Caffe,程序报错应用程序无法正常启动(0xc000007b)
    C++ 11的移动语义
    C++ 11的右值引用
    (持续更新)Qt3D 学习资源
    Qt3D 设置窗口背景颜色和图案
    C++ chrono 库中的 steady_clock 和 system_clock
    VS2017+CMake+OpenCV下报错 set OpenCV_FOUND to FALSE
    C++可继承的单例基类模板
    AngularJS的基础知识
    gulp入门详情
  • 原文地址:https://www.cnblogs.com/liyajie/p/liyajie_unity3d.html
Copyright © 2011-2022 走看看