112 lines
3.9 KiB
C#
112 lines
3.9 KiB
C#
using System;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class Player : MonoBehaviour
|
||
{
|
||
|
||
public TextMeshProUGUI musicName; //显示歌曲的名字及歌手
|
||
public TextMeshProUGUI nowTime; //显示歌曲已播放的时间长度
|
||
public TextMeshProUGUI allTime; //显示当前歌曲的总时间长度
|
||
public Slider slid; //进度条
|
||
public Transform buttons; //按钮所在的集合体
|
||
public AudioClip[] auc; //存放歌曲的数组
|
||
public AudioSource aus; //音频播放器
|
||
|
||
private int currentHour, currentMinute, currentSecond; //已播放的时间(时、分、秒)
|
||
private int clipHour, clipMinute, clipSecond; //总时间(时、分、秒)
|
||
|
||
public static Player _instance;
|
||
|
||
void Start()
|
||
{
|
||
_instance = this;
|
||
|
||
aus.Stop(); //开始运行时不播放,点播放键才开始播放
|
||
|
||
#region 注:该方式虽然可以直接达到拖动进度条就播放到进度条当前的音乐,但会产生滋滋啦啦的杂音,是因为进度条value变化,使之不断调用onValueChanged,从而让音乐的进度发生了变化,音乐前后颠倒,不断重叠
|
||
///
|
||
/// 所以新建了个DragSlider脚本,挂在进度条上,来实现拖动播放的效果
|
||
///
|
||
//slid.onValueChanged.AddListener(delegate
|
||
//{
|
||
// //加上之后,避免拖动进度条到最后不松手时报错
|
||
// if (slid.value == 1)
|
||
// return;
|
||
// //给进度条添加事件监听,每当拖动进度条,歌曲从相应的位置播放
|
||
// aus.time = slid.value * aus.clip.length;
|
||
//});
|
||
|
||
buttons.GetComponent<Button>().onClick.AddListener(Play);
|
||
#endregion
|
||
|
||
}
|
||
void Update()
|
||
{
|
||
//当前播放过的时间
|
||
nowtime();
|
||
//当前正在播放的音频的总时间
|
||
alltime();
|
||
//当前正在播放的音乐
|
||
nowMusic();
|
||
}
|
||
void nowtime()//当前播放过的时间
|
||
{
|
||
currentHour = (int)aus.time / 3600; //时
|
||
currentMinute = (int)(aus.time - currentHour * 3600) / 60;//分
|
||
currentSecond = (int)(aus.time - currentHour * 3600 - currentMinute * 60);//秒
|
||
|
||
//显示当前播放过的时间
|
||
nowTime.text = aus.time.ToString();
|
||
//进度条变化
|
||
//(之后更新版)如果当前没有拖拽进度条
|
||
//
|
||
}
|
||
void alltime()//歌曲总时间
|
||
{
|
||
//slid.value = 0;
|
||
clipHour = (int)aus.clip.length / 3600;//时
|
||
clipMinute = (int)(aus.clip.length - clipHour * 3600) / 60;//分
|
||
clipSecond = (int)(aus.clip.length - clipHour * 3600 - clipMinute * 60);//秒
|
||
//显示歌曲总时间
|
||
allTime.text = string.Format("{0:D2}:{1:D2}:{2:D2}",
|
||
clipHour, clipMinute, clipSecond);
|
||
}
|
||
//private void LastMusic() //上一曲
|
||
//{
|
||
// index--; //索引减一
|
||
// //若索引等于-1,即当前播放的音频是aus数组列表的第一首,则上一首应为aus数组列表的最后一首
|
||
// if (index == -1)
|
||
// index = auc.Length - 1;
|
||
// aus.clip = auc[index]; //音频播放器的音频为aus数组中索引对应的音频
|
||
// slid.value = 0; //初始化进度条
|
||
// aus.time = 0; //初始化音乐的播放时间(从头开始播)
|
||
// aus.Play(); //播放音频
|
||
//}
|
||
private void Pause() //暂停
|
||
{
|
||
aus.Pause();
|
||
}
|
||
private void Play() //播放
|
||
{
|
||
//如果当前正在播放,则返回
|
||
if (aus.isPlaying)
|
||
return;
|
||
aus.Play();
|
||
}
|
||
void nowMusic() //当前的音频
|
||
{
|
||
AudioClip clip = aus.clip; //当前播放的音频
|
||
string n = aus.clip.name; //当前播放的音频的名字
|
||
//string[] na = n.Split('-'); //以“-”为分割点,把音频名分为若干部分
|
||
|
||
//显示当前正在播放的歌曲的名字【歌曲名(默认字体,25号)+歌手名(默认字体,18号,红色)的形式】
|
||
musicName.text = n;
|
||
|
||
//index = Array.IndexOf(auc, clip);//当前播放的音频在aus数组中的索引
|
||
/*Slider(); */ //当进度条走到最后时,播放下一曲
|
||
}
|
||
|
||
}
|