栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

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

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • 场景描述
    • 场景布局及层级目录
      • 场景一(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();
                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
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();
        ShiftButton = GameObject.Find("ShiftButton2").GetComponent
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号