Unity组件开发--背景音乐管理器

这篇具有很好参考价值的文章主要介绍了Unity组件开发--背景音乐管理器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.背景音乐作为一个独立的节点:

Unity组件开发--背景音乐管理器,unity组件开发,unity,游戏引擎,游戏程序

2.通过Url加载背景音乐:运行后添加AudioSource组件

using DG.Tweening;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Analytics;
using UnityEngine.Networking;

public class PlaySceneBgm : MonoBehaviour
{
    [HideInInspector]
    public AudioSource audioS;
    [HideInInspector]
    public string url;
    [HideInInspector]
    public static PlaySceneBgm Instance;
    private bool isLoaded;
    // Start is called before the first frame update
    [HideInInspector]
    public string defaultbgmUrl = "";

    private float playCurMusicProgress = 0;
    private bool isPaused = false;
    private string lastPlayUrl = "";
    public void SetUrl(string audioLink)
    {

        if (url == audioLink)
        {
            return;
        }
        this.playCurMusicProgress = 0;
        url = audioLink;
        StartCoroutine(GetAudioClip(true));
    }


    
    // Start is called before the first frame update
    void Awake()
    {

        audioS = gameObject.AddComponent<AudioSource>();
        audioS.playOnAwake = false;
        audioS.loop = true;
        audioS.volume = 0.25f;
        Instance = this;

        EventManager.Instance.AddListener(EventName.OnSceneLoaded, (s, e) => {
            if (!string.ReferenceEquals(PlayerData.Instance.TemplateId.ToString(), null))
            {

                url = "..........";
            }
            defaultbgmUrl = url;
            if (PlayerData.Instance.isRunningPC)
            {
                Debug.Log("当前是在PC上播放背景音乐");
                StartCoroutine(GetAudioClip(true));
            }
            
        });
        
        EventManager.Instance.AddListener(EventName.stopSceneBgm, stopSceneBgm);
        EventManager.Instance.AddListener(EventName.playSceneBgm, playSceneBgm);
        EventManager.Instance.AddListener(EventName.changeSceneBgmValue, changeSceneBgmValue);
    }



    public float getCurMusicPro() {

        return this.playCurMusicProgress;
    }

    public void stopSceneBgm(object sender, EventArgs e) {
        if (isLoaded && audioS.clip != null)
        {
            audioS.Pause();
            
            isPaused = true;
        }
    }

    public bool getPlayState() {

        if (isLoaded && audioS.clip != null)
        {
            return audioS.isPlaying;
        }
        else {

            return false;
        }
    }

    public void playSceneBgm(object sender, EventArgs e)
    {
        if (isLoaded && audioS.clip != null)
        {

            audioS.Play();
        }
        else {

            StartCoroutine(GetAudioClip(true));
        }
    }

    // 恢复音频播放
    public void resumeSceneBgm()
    {
        if (isLoaded && audioS.clip != null)
        {
            
            if (isPaused)
            {
                
                StartCoroutine(ResumeWithDelay());
                //url = lastPlayUrl;
                //StartCoroutine(GetAudioClip(true));
                isPaused = false;
            }
        }
        
    }

    private IEnumerator ResumeWithDelay()
    {
        yield return new WaitForSeconds(0.1f); // 添加 0.1 秒的延迟
        if (isLoaded && audioS.clip != null)
        {
            audioS.UnPause();
        }
            
    }

    public void changeSceneBgmValue(object sender, EventArgs e)
    {
        var data = e as changeBgmVolume;
        if (data != null) {

            audioS.volume = data.volume;
        }
    }

    IEnumerator GetAudioClip(bool isPlay = false)
    {
        this.playCurMusicProgress = 0;
        Debug.Log("音频加载11111" + url);
        if (UtilsFunc.IsURL(url) == false)
        {
            yield break;
        }

        var audioType = AudioType.MPEG;
        if (UtilsFunc.UrlExtension(url, "*.mp3") || UtilsFunc.UrlExtension(url, "*.MP3"))
        {
            audioType = AudioType.MPEG;
        }
        else if (UtilsFunc.UrlExtension(url, "*.wav"))
        {
            audioType = AudioType.WAV;
        }
        else if (UtilsFunc.UrlExtension(url, "*.ogg"))
        {
            audioType = AudioType.OGGVORBIS;
        }

        Debug.Log("音频加载0000" + url);
        //using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, audioType))
        //{
        //    yield return uwr.SendWebRequest();
        //    if (uwr.result != UnityWebRequest.Result.Success)
        //    {
        //        Debug.LogError("音频加载8888"+uwr.error);
        //        yield break;
        //    }
        //    Debug.Log("音频加载22222" + url);
        //    isLoaded = true;
        //    AudioClip clip = DownloadHandlerAudioClip.GetContent(uwr);
        //    // use audio clip
        //    // 在异步线程中进行加载和分配
        //    audioS.clip = clip;
        //    lastPlayUrl = url;
        //    StartCoroutine(LoadAudioClip(isPlay));    
        //}
        WWW _www = new WWW(url);
        yield return _www;
        if (_www.error == null)
        {
            isLoaded = true;
            AudioClip _audioClip = _www.GetAudioClip(true, true, audioType);
            audioS.clip = _audioClip;
            lastPlayUrl = url;
            StartCoroutine(LoadAudioClip(isPlay));    
        }
        else
        {
            Debug.Log(_www.error);
            Debug.LogError("音频加载报错" + _www.error);
            yield break;
        }

    }



    public void WebRequestPlayMP3()
    {
        
        StartCoroutine(IELoadExternalAudioWebRequest(url, AudioType.MPEG));
    }
    public void WWWPlayMP3()
    {
        
        StartCoroutine(IELoadExternalAudioWWW(url, AudioType.MPEG));
    }
    public void WebRequestPlayWAV()
    {
        
        StartCoroutine(IELoadExternalAudioWebRequest(url, AudioType.WAV));
    }
    public void WWWPlayWAV()
    {
        
        StartCoroutine(IELoadExternalAudioWWW(url, AudioType.WAV));
    }

    private IEnumerator IELoadExternalAudioWebRequest(string _url, AudioType _audioType)
    {
        UnityWebRequest _unityWebRequest = UnityWebRequestMultimedia.GetAudioClip(_url, _audioType);
        yield return _unityWebRequest.SendWebRequest();
        if (_unityWebRequest.isHttpError || _unityWebRequest.isNetworkError)
        {
            Debug.Log(_unityWebRequest.error.ToString());
        }
        else
        {
            AudioClip _audioClip = DownloadHandlerAudioClip.GetContent(_unityWebRequest);
            audioS.clip = _audioClip;
            audioS.Play();
        }
    }

    private IEnumerator IELoadExternalAudioWWW(string _url, AudioType _audioType)
    {

        this.playCurMusicProgress = 0;
        Debug.Log("音频加载11111" + url);
        if (UtilsFunc.IsURL(url) == false)
        {
            yield break;
        }

        WWW _www = new WWW(_url);
        yield return _www;
        if (_www.error == null)
        {
            AudioClip _audioClip = _www.GetAudioClip(true, true, _audioType);
            audioS.clip = _audioClip;
            audioS.Play();
        }
        else
        {
            Debug.Log(_www.error);
        }
    }


    private IEnumerator LoadAudioClip(bool isPlay = false)
    {

        yield return audioS.clip.LoadAudioData();
        yield return new WaitUntil(() => audioS.clip.loadState == AudioDataLoadState.Loaded);
        Debug.Log("音频加载状态......." + audioS.clip.loadState);
        if (isPlay && audioS.clip.loadState == AudioDataLoadState.Loaded)
        {
            audioS.Play();
        }

        
    }

    // Update is called once per frame
    void Update()
    {
        if (audioS.clip == null) {
            return;
        }

        // 获取音频播放的进度
        float progress = audioS.time / audioS.clip.length;

        // 输出播放进度
        //Debug.Log("当前歌曲播放进度:" + progress);
        this.playCurMusicProgress = progress;

    }
}

3.外部通过PlaySceneBgm.Instance 调用相关接口:

Unity组件开发--背景音乐管理器,unity组件开发,unity,游戏引擎,游戏程序文章来源地址https://www.toymoban.com/news/detail-818989.html

到了这里,关于Unity组件开发--背景音乐管理器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网站背景音乐隐藏按钮自动播放

    现在浏览器都禁止网页自动播放音乐了,需要访客点击才可播放,怎么样才能让网站背景音乐自动播放看下面教程。 一、添加网页背景音乐并隐藏按钮 添加音乐 隐藏按钮CSS 二、设置在网页开始加载后点击界面后立即播放音乐

    2024年02月11日
    浏览(29)
  • javascript实现网页背景音乐自动播放

    在HTML文档中添加一个标签,指定音乐文件路径和自动播放属性。 在JavaScript中获取该元素,设置其音量为0(静音)或一个合适的值。 在网页加载完毕后,调用元素的play()方法,开始播放音乐。 完整代码如下: 注意:自动播放可能会受到浏览器限制,需要用户允许浏览器自动

    2024年02月04日
    浏览(38)
  • 怎么提取视频中的背景音乐?

    当我们在刷视频的时候,有时候听到一个背景音乐很好听,但是又不知道歌名,比如英语歌,这个时候我们很难找到这首歌,相信有很多朋友会遇到这样的问题,不知道怎么弄,下面小编给大家推荐一些方法帮助大家轻松地把视频中的声音提取出来 方法一:使用“智优影”

    2024年02月01日
    浏览(45)
  • Qt中利用QMediaPlayer添加背景音乐

    如果你用的是Qt Creator,请先在pro中添加 Qt+=multimediawidgets,如果你用的是VS,请先在VS中添加multimediawidgets模块 ,VS中添加该模块的具体方法如下: 右击项目-属性-Qt Project Settings-左击Qt Modules旁边的一栏-点击最右侧下拉按钮,选择Select Modules-在跳出来的界面中添加multimediawidge

    2024年02月11日
    浏览(44)
  • uniapp小程序背景音乐自动播放、播放、暂停

    在做小程序的时候时常会用到背景音乐,对于背景音乐的使用有刚进入页面时会自动播放背景音乐,不想听点击暂停按钮,播放暂停,点击播放按钮,音乐播放 1、在html中添加两张图片:播放和暂停,v-show来动态切换图片显示,并绑定点击事件,实现手动暂停和播放音乐 2、

    2024年02月11日
    浏览(37)
  • 怎么去除视频里的背景音乐?其实非常简单!

    如何去除视频背景音乐?在视频处理中,有时我们需要从视频中提取声音并进行处理,而不仅仅是简单地去除整个背景音乐。我们可能需要有选择性地去除人声或背景音乐。这个处理过程对于选用合适的工具至关重要。在本文中,我将分享两种可用于去除视频背景音乐的工具

    2024年02月14日
    浏览(33)
  • UE4/5对背景音乐的调整设置

    音乐是一个游戏必不可少的因素。 而在游戏设置中,必不可少的就有对背景音乐的声音大小进行设置,而我们需要的就是如何对背景音乐进行设置: 准备两个蓝图,分别是 音效类 和 音效类混合 。 然后打开 音效类 ,我们可以看见下图的样子,新创建一个 混合修改器 ,将

    2024年02月09日
    浏览(30)
  • 音频分离:分离人声和背景音乐的方法及代码实现

    音频分离是一项重要的音频处理任务,它可以将音频信号中的人声和背景音乐分开,使得我们能够对它们进行独立的处理和分析。本文将介绍一些常用的音频分离方法,并提供相应的代码实现。 基于混合模型的音频分离方法 基于混合模型的音频分离方法利用统计模型对混合

    2024年04月23日
    浏览(25)
  • HTML中插入自动播放的背景音乐-亲测有效

    很简单,使用audio标签把它放在body或head里面就行 autoplay在页面加载完成就开始播放音频 controls显示播放栏 loop循环 如果你还需要用js灵活的控制它的播放有否,你可以用如下代码 一定一定要给权限!!!要给权限!!!要给权限!!! ,这个代码在运行以后会弹出权限请求窗口,但

    2024年02月12日
    浏览(39)
  • 【c语言】五子棋(EasyX图形库+背景音乐)

    大家好,有没有觉得写了好多c语言代码,面对的都是黑框框控制台,当我们学习了基础的c语言知识,和EasyX图形库后,终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋,跟着小张一起学习吧 图形库链接 1.点击下载 2.安装你对应集成开发环境对应的安装包,我用

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包