文章目录

  • 场景描述
  • 场景布局及层级目录
    • 场景一(SceneOne)
    • 场景二(SceneTwo)
  • 脚本
    • GameConst.cs
    • AlwaysPlay.cs
    • Controller.cs
    • Controller2.cs

场景描述

两个场景:场景一和场景二

当从场景一点击“去场景二”按钮时,可以切换至场景二,音乐可不间断播放。当从场景二点击“去场景一”按钮时,切换回场景一。两个场景中均可控制音乐资源的音量

场景布局及层级目录

场景一(SceneOne)


其中,ShiftButton用于切换场景二,volumeSlider用于控制音量大小。

GameMusic(空物体)上挂载了AudioSource组件(声音资源)及AlwaysPlay脚本(使用DontDestroyOnLoad方法在跨场景过程中不销毁GameMusic物体)。

GameManager(空物体)上挂载了Controller脚本。

场景二(SceneTwo)


其中,ShiftButton2用于切换场景一,volumeSlider2用于控制音量大小。

GameManager2(空物体)上挂载了Controller2脚本。

脚本

GameConst.cs

用于保存游戏中需要保存的常量,这里保存音乐资源的音量。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GameConst : MonoBehaviour
{public enum PlayerPrefsStr{soundValue,}
}

AlwaysPlay.cs

使用DontDestroyOnLoad方法使得音乐资源所在空物体在场景二中不被销毁。
需要考虑再次进入场景的重复问题。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AlwaysPlay : MonoBehaviour
{static AlwaysPlay _instance;public static AlwaysPlay instance{get{if (_instance == null){_instance = FindObjectOfType<AlwaysPlay>();DontDestroyOnLoad(_instance.gameObject);}return _instance;}}private void Awake() {//此脚本永不销毁,并且每次进入初始场景时进行判断,若存在重复的则销毁if (_instance == null){_instance = this;DontDestroyOnLoad(this);}else if (this != _instance){Destroy(gameObject);}}
}

Controller.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;public class Controller : MonoBehaviour
{private Button ShiftButton;private Slider volumeSlider;private AudioSource audioSource;void Awake() {//获取对应组件ShiftButton = GameObject.Find("ShiftButton").GetComponent<Button>();volumeSlider = GameObject.Find("volumeSlider").GetComponent<Slider>();audioSource = GameObject.Find("GameMusic").GetComponent<AudioSource>();//注册切换场景按钮的点击事件ShiftButton.onClick.AddListener(OnShiftClick);}void Start(){Init();audioSource.Play();}public void Init(){//当音量是有上一次记录的值时,附上相应的值if(PlayerPrefs.HasKey(GameConst.PlayerPrefsStr.soundValue.ToString())){float vol = PlayerPrefs.GetFloat(GameConst.PlayerPrefsStr.soundValue.ToString());audioSource.volume = vol;volumeSlider.value = vol;}//否则,设置当前音量值为1else{audioSource.volume = 1;PlayerPrefs.SetFloat(GameConst.PlayerPrefsStr.soundValue.ToString(),1);volumeSlider.value = 1;}//音量条拖动时,记录下当前音量值volumeSlider.onValueChanged.AddListener(delegate (float vol){PlayerPrefs.SetFloat(GameConst.PlayerPrefsStr.soundValue.ToString(),vol);audioSource.volume = vol;});}//点击切换按钮,切换至场景二void OnShiftClick(){SceneManager.LoadScene("SceneTwo");}
}

Controller2.cs

using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;public class Controller2 : MonoBehaviour
{private Button ShiftButton;private AudioSource audioSource;private Slider volumeSlider;void Awake(){//获取对应组件audioSource = GameObject.Find("GameMusic").GetComponent<AudioSource>();ShiftButton = GameObject.Find("ShiftButton2").GetComponent<Button>();volumeSlider = GameObject.Find("volumeSlider2").GetComponent<Slider>();//注册切换场景按钮的点击事件ShiftButton.onClick.AddListener(OnShiftClick);}// Start is called before the first frame updatevoid Start(){if(PlayerPrefs.HasKey(GameConst.PlayerPrefsStr.soundValue.ToString())){float vol = PlayerPrefs.GetFloat(GameConst.PlayerPrefsStr.soundValue.ToString());audioSource.volume = vol;volumeSlider.value = vol;}else{   audioSource.volume = 1;PlayerPrefs.SetFloat(GameConst.PlayerPrefsStr.soundValue.ToString(),1);volumeSlider.value = 1;}volumeSlider.onValueChanged.AddListener(delegate (float vol){PlayerPrefs.SetFloat(GameConst.PlayerPrefsStr.soundValue.ToString(),vol);audioSource.volume = vol;});}//点击切换按钮,切换回场景一void OnShiftClick(){SceneManager.LoadScene("SceneOne");}
}

【Unity】跨场景音乐资源不间断播放(可控音量)相关推荐

  1. unity跨场景保存(跨场景BGM的连续播放)

    在游戏开发过程中,我们为了工作量小一点 可能会弄好多不同的场景 用来实现各种功能 比如开始界面一个场景 关卡选择等一个场景 这样在开发中很方便 直接跳转就行 但是可能遇到很多跨场景保存的问题 这篇博客 ...

  2. Unity VR场景内资源闪面

    在使用VR的时候,用头盔看场景会出现闪面的问题,闪面原因之一是Camera的Clipping Planes的值过于小的引起的,而我们将Clipping Planes的值调高后,手柄又会看不见,所以我们 ...

  3. Unity实现跨场景的传送门

    Unity实现跨场景的传送门 目录 Unity实现跨场景的传送门 引言 视频效果 具体实现 门 数据 场景异步加载 关于门的特效 引言 之前写过一篇文章--<Unity第一人称可视化传送门制作& ...

  4. Unity实现 场景切换 音乐不断

    转自彪哥,我稍微略加改动下..把我自己实现过程中容易犯错的点稍微点下.红字需注意 http://blog.csdn.net/xiebiao360/article/details/14093463 原文 ...

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

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

  6. Unity场景美术资源优化,可以从这几方面着手

    概述: 在游戏制作中,绝大部分游戏的场景美术资源都会占用设备相当大的储存和计算量,而且游戏运行起来还有其他如角色.动画.特效.UI.贸易和战斗交互及AI.寻路等程序系统的调用和运行.对场景美术资源进行 ...

  7. Unity 打包和读取AB资源,并播放打包的AB序列图!

    Unity - 打包和读取AB资源,并播放打包的AB序列图! 一:效果图 二:插件下载 三:插件导入! 三:代码! 四:Demo学习 五:关于AB资源打包的学习和拓展 本文提供详细教程 记录遇到的难点 ...

  8. Html5+Css3实现类似网易云音乐的移动版播放器

    Demo Demo链接如下(支持Chrome与Safari,其它浏览器未测试)并非太完善,主体功能已实现,其它功能有时间在加上吧. http://followyourheart.sinaapp.com ...

  9. Unity 中的音乐可视化

    Unity 中的音乐可视化 本帖最后由 204有个大坑 于 2017-5-31 17:33 编辑 1738music-visulization-in-unity.jpg (32.33 KB, 下载次数 ...

  10. unity 前端场景搭建UI框架的设计

    在 Unity 前端场景中搭建 UI 框架时,可以采用以下设计方案: 基础组件库:设计一套基础组件库,包括常用的 UI 控件,如文本.按钮.图像等,组件库的设计应该尽量简单易用,方便开发者快速搭建 U ...

最新文章

  1. 【待继续研究】建模-听说你的坏样本不太够
  2. java虚拟机内存告警_Java虚拟机总结
  3. Hiredis库的简单使用
  4. Windows保护模式学习笔记(七)—— PDEPTE
  5. WebLogic下WAR方式部署获取文件路径问题
  6. Spark SQL程序实现RDD转换DataFrame
  7. 又一个基于 Esbuild 的神器!esno
  8. vue事件委托传递节点防止向下传递穿透
  9. java接口自动化(二) - 接口测试的用例设计
  10. 数组与数组冒泡排序,选择排序
  11. 希腊字母fai怎么打?
  12. python多进程假死
  13. 中年危机也许只是个幻觉
  14. PMP培训费和考试费
  15. 道翰天琼认知智能为您解密:Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会 「自2016年以来,Facebook 就已开始使用 Rust,并应用在开发
  16. PHP:APP接口开发
  17. C#FFmpeg视频采集与推送RTMP服务器代码思路整理
  18. 外文翻译原文附在后面_外文翻译与外文原文(参考格式).doc
  19. 2021年中国数据安全行业发展现状及未来发展前景分析:数据安全市场快速增长[图]
  20. 2021上海L Three,Three,Three(一般图匹配)

热门文章

  1. Flink部署——Debugging(开发实用,建议收藏)
  2. 阴阳师服务器维护内容,阴阳师8月1日维护内容介绍_友人帐弈鬼切内容介绍_3DM手游...
  3. 从零开始手写 VIO
  4. edge浏览器使用IE模式进行调试
  5. windows系统的包管理器【choco】
  6. 数据库课程设计(民航售票子系统含数据库代码和前端代码)
  7. 浙大玉泉校区-武林门民航售票处-萧山机场
  8. 【Python实战项目】做一个 刮刮乐 案例,一不小心....着实惊艳到我了。
  9. DWT文件怎么转换成html,dwg和dwt文件有什么区别?DWT又可以转换什么格式?-迅捷CAD转换器...
  10. 新手怎样安装win10系统?win10系统安装教程解读