Unity定时播放音乐

一、需求

需要定时在早上8:50,中午12:00,下午13:10定时播放音乐

二、实现步骤

  • 依次在unity创建背景图、主文字提示、时间文字提示、音量控制器及音量文字提示、退出按钮、播放按钮,暂停按钮

  • 在Canvas下创建一个Script脚本:获取工程中的Text、Button、Slider、AudioClip组件,及音乐文件“AudioClip"。将音乐文件附加到AudioSource的AudioClip上、并将上面的组件关联到代码上;

    public Text tipstext;
    public Text SoundText;
    public Text dateText;
    //退出、播放、暂停按钮
    public Button exitButton;
    public Button playButton;
    public Button stopButton;
    public Slider volSilder;
    //音乐资源
    private AudioSource bgm;
  • 依次实现文本显示、按钮事件监听、音乐播放、时间逻辑判断,整个需求就完成了
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Unity.Burst.Intrinsics;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
//using UnityEngine.UIElements;


public class MusicControl : MonoBehaviour
{   
    //文字提示
    public Text tipstext;
    public Text SoundText;
    public Text dateText;
    //退出、播放、暂停按钮
    public Button exitButton;
    public Button playButton;
    public Button stopButton;
    public Slider volSilder;
    //音乐资源
    private AudioSource bgm;
    //时间
    DateTime nowTime = DateTime.Now;
    string NowTimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    
    // Start is called before the first frame update
    void Start()
    {
        //初始化按钮
        InitButtonClick();
        
        //获取音乐组主键,并设置音量大小
        bgm = transform.GetComponent<AudioSource>();
        bgm.volume = 0.5f;
        
        //初始化文字提示
        ShowText(tipstext,"等待音乐播放!");
        ShowText(SoundText,"当前音量50%,滑动设置音量大小");
        ShowText(dateText,NowTimeStr);
        //不设置全屏
        Screen.fullScreen =false;
        
    }

    // Update is called once per frame
    void Update()
    {
        //在指定时间执行
        OnTimePlay();
    }

    
    // 播放音乐 isplaying:是否进行音乐播放
    private void PlayMusic(bool isplaying){
        //Debug.Log("调用播放音乐:"+isplaying);
        if(bgm.enabled ==false){
            Debug.Log("找不到音乐文件");
            return;
        }
        if(isplaying==true &&bgm.isPlaying==false){
            bgm.Play();
            //展示播放音乐提示
            ShowText(tipstext,"正在播放音乐:"+bgm.clip.name);
            Debug.Log("正在执行播放音乐");
            //音乐播放时,每5秒检查一次音乐状态
            InvokeRepeating("CheckMusicPlaying",0,5.0f);
        }
        else if(isplaying == true && bgm.isPlaying ==true){
            //正在播放音乐时,传 播放参数,提示不能重复播放
            ShowText(tipstext,"正在播放音乐中,不要重复播放!");
        }
        else if(isplaying == false && bgm.isPlaying==true){
            //正在播放,传 暂停播放参数,停止播放
            bgm.Stop();
            ShowText(tipstext,bgm.clip.name +"音乐已停止!");
        }
        else if(isplaying ==false && bgm.isPlaying ==false){
            //未播放,传暂停播放参数,提示不能重复暂停
            ShowText(tipstext,"音乐已停止,不要重复点击停止播放按钮!");
        }
    }
    //更新Text组件显示的内容
    private void ShowText(Text gmtxet,string str){
        gmtxet.text=str;
    }
    //初始化按钮点击监听事件
    void InitButtonClick(){
        if(exitButton !=null){
            exitButton.onClick.AddListener(OnExitButtonClick);
        }
        else{
            Debug.Log("退出按钮未获取到!");
        }
        if(playButton != null){
            playButton.onClick.AddListener(OnPlayButtonClick);
        }
        else{
            Debug.Log("播放按钮未获取到!");
        }
        if(stopButton != null){
            stopButton.onClick.AddListener(OnStopButtonClick);
        }
        else{
            Debug.Log("停止按钮未获取到!");
        }

        if(volSilder != null){
            volSilder.onValueChanged.AddListener(OnVolSliderChange);
        }
        else{
            Debug.Log("音量按钮未获取到!");
        }
    }
    
    //执行退出按钮点击事件
    void OnExitButtonClick(){
        Debug.Log("退出");
        
        #if UNITY_EDITOR
        //在编辑器也能退出
        UnityEditor.EditorApplication.isPlaying = false;
        #else
        Application.Quit();
        #endif
    }
    //执行点击播放按钮事件
    void OnPlayButtonClick(){  
       PlayMusic(true); 
    }
    //执行点击暂停按钮事件
    void OnStopButtonClick(){
        //Debug.Log("停止");
        PlayMusic(false);
    }
    //检查音量播放,音乐播放初始化时调用
    void CheckMusicPlaying(){
        if(bgm !=null &&bgm.isPlaying){
            Debug.Log("音乐正在播放");
        }
        else{
            Debug.Log("音乐已经播放完成");
            ShowText(tipstext,"音乐播放完成!");
            //取消检查音乐播放监听事件
            CancelInvoke("CheckMusicPlaying");
        }
    }
    //已被引用,监听时间 触发播放
    void OnTimePlay(){
        //获取当前时间
        nowTime = DateTime.Now;
        NowTimeStr =nowTime.ToString("yyyy-MM-dd HH:mm:ss");
        //展示当前时间
        ShowText(dateText,NowTimeStr);
        //Debug.Log("时:"+nowTime.Hour+",分:"+nowTime.Minute);
        if(nowTime.Hour==8 && nowTime.Minute ==50 && nowTime.Second==0 ){
            //避免重复播放
            if(bgm.isPlaying==false){
                PlayMusic(true);  
            }
        }
        else if(nowTime.Hour==12 && nowTime.Minute ==0 && nowTime.Second==0){
            if(bgm.isPlaying==false){
                PlayMusic(true);  
            }
        }
        else if(nowTime.Hour==13 && nowTime.Minute ==10 && nowTime.Second==0 ){
            if(bgm.isPlaying==false){
                Debug.Log("下午:"+nowTime.Hour+"时,"+nowTime.Minute+"分,"+nowTime.Second+"秒");
                PlayMusic(true);  
            }
        }
    }
    
    //音量滑动键改变
    public void OnVolSliderChange(float value){
        //设置音乐音量大小
        bgm.volume= value;
        //float.ToString P表示创建一个百分比字符串,P2保留两位小数
        ShowText(SoundText,"音量:"+value.ToString("P0"));
    }
    
}

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值