unity音乐实现了播放和切换,但暂停不了?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity音乐实现了播放和切换,但暂停不了?相关的知识,希望对你有一定的参考价值。

代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Test : MonoBehaviour

public GameObject AudioObject;//音乐预知物体,设置tag
private GameObject musicInstant = null;//用于判断场景中是否有这个物体

//将要轮流播放的音乐组
public AudioClip[] audioGroup;

//当前播放的是谁
private int playingIndex;
//是否允许播放音乐
private bool canPlayAudio;
//Audiosource组件
private AudioSource audioSource;
private bool canNextAudio;
private bool canStopAudio;
void Start()

musicInstant = GameObject.FindGameObjectWithTag("sound");//设置成相同的tag
if (musicInstant == null)//最开始加载完场景,musicInstant = null,进入这个方法对音乐的组件进行克隆,此后都是对这个组件进行操作

musicInstant = (GameObject)Instantiate(AudioObject);//克隆原始物体


public void PlayMusic()




musicInstant.gameObject.GetComponent<AudioSource>().Play();


public void NextMusic()

musicInstant.gameObject.GetComponent<AudioSource>().Pause();


public void StopMusic()

musicInstant.gameObject.GetComponent<AudioSource>().Stop();

void Update()

if (canPlayAudio)

PlayAudio();

canPlayAudio = false;

if (canStopAudio)

StopAudio();
playingIndex = 5;
canPlayAudio = false;


if (!audioSource.isPlaying)

if (canNextAudio)

return;

playingIndex++;

if (playingIndex >= audioGroup.Length)

playingIndex = 0;


canPlayAudio = true;

else

PauseAudio();
canPlayAudio = false;



//-----------------------------------------------------

private void PlayAudio()

audioSource.clip = audioGroup[playingIndex];
audioSource.Play();

private void StopAudio()

audioSource.clip = audioGroup[playingIndex];
audioSource.Stop();


private void PauseAudio()

audioSource.clip = audioGroup[playingIndex];
audioSource.Pause();


参考技术A 没有看到你是如何调用暂停的(canNextAudio是如何改变的)
而且 你调用的暂停方法里
private void PauseAudio()

audioSource.clip = audioGroup[playingIndex];这行有点多余(虽然加了也没什么特别的问题)
audioSource.Pause();


以下为假设
如果 不会暂停播放的内容,请检查调用是否成功
如果 暂停后 播放又从头开始了,检查 播放的是否是同一个audioSource.clip(比如 播放的是New的内容或者切换过其他的clip又切换了回来),
或者 是否重复调用audioSource.Play();方法(在播放后再次调用播放方法,播放内容会从头开始)
条件不足,只能猜测,具体情况请追问。

实现视频的暂停播放,上下切换等功能

这里只说明一些逻辑思维:详细代码可以看我的——unity视频播放器

1、暂停与播放之间的切换

        要实现点击播放,再点击暂停的功能

        则要知道你修改的参数是哪一个(比如Video中的是Pause()函数和Play()函数)PS:AudioSoure中的是Pause()和UnPause()——判断依据:Video.isPlaying(是一个bool类型)

        两个图片之间的切换

          变为 

         首先这是两个功能按钮,一个一开始会隐藏,当点击图一中的按钮时,图二按钮会显示出来,再点击图二按钮时图二隐藏则出现的是图一的按钮。(图二的按钮层级是要在图一按钮下面的,即显示在画面的上一层)PS:图二与图一按钮是父子层级结构的。

        

 

综上所述则可以实现点击切换不同的按钮和视频的暂停与播放功能。

2、视频上下切换的功能

       上下按钮实现切换不同的视频

        点击按钮切换不同视频——要有一个播放视频的列表(可以用到数组)——问题:不能够自动循环的跳转或暂停所切换的视频——查询到对应的视频ID才能够进行播放(可以定义一个视频ID)——写两个函数分别判断视频的Id是否到了最后一个或是第一个——切换到最后一个,将ID切换到第一个,另一种情况反之。

以下代码是实现上下切换的主要代码:

    //<summary>
    //上一首
    //</summary>
    public void Prve()
    
        _playId--;
        if (_playId < 0)
        
            //_playId = 0;    //到头了就不能切换了
            _playId = VideoList.Length - 1;  //切换到最后一首
            Debug.Log("到头了");
        
        Play();
    
    //<summary>
    //下一首
    //</summary>
    public void Next()
    
        _playId++;
        if (_playId > VideoList.Length - 1)
        
            //_playId = ClipList.Length - 1;    //到尾了就不能切换了
            _playId = 0; //切换到第一首
            Debug.Log("到尾了");

        
        Play();
    

辅助代码——按钮控制:

public Button Pausebtn;

void Start()

            Pausebtn.onClick.AddListener(PauseFun);



private void PrevFun()
    
        MyVideoPlayer.Instance.Next();
        TxtInfo.text = MyVideoPlayer.Instance.GetMusicName();    //前一个代码是要写成单例模式,这里是调用其方法。
    

今天就记录到这里啦!

期待自己的学习更近一步!加油加油!!!

以上是关于unity音乐实现了播放和切换,但暂停不了?的主要内容,如果未能解决你的问题,请参考以下文章

实现视频的暂停播放,上下切换等功能

qq小窝腾讯视频切换进度方法

本地音乐播放器——简介篇

在 HTML 音频播放器中切换播放/暂停按钮

如何在 Inno Setup 中制作停止和暂停/恢复/播放音乐按钮

Alpha版本测试报告