Unity坦克大战开发全流程——开始场景——背景音乐

开始场景——背景音乐

先在场景上创建一个名为“BKMusic”的空物体与其对应的脚本

单例模式

得到对应的音源控件

再在该脚本中编写能够控制音源的函数

并在数据管理类中调用该函数

然后还要在BKMusic脚本的Awake函数中进行背景音乐的初始化(根据上一次的数据进行设置,防止数据丢失)

 直到当前BKMusic和GameDataMgr的代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BKMusic : MonoBehaviour
{
    private static BKMusic instance;
    public static BKMusic Instance
    {
        get { return instance; }
    }

    private AudioSource audioSource; 


    void Awake()
    {
        instance = this;
        //得到该脚本依附的物体上的音源组件
        audioSource = GetComponent<AudioSource>();
        
        //第一次进游戏时,进行初始化
        ChangeValue(GameDataMgr.Instance.musicData.bkValue);
        ChangeOpen(GameDataMgr.Instance.musicData.isOpenBK);
    }

    /// <summary>
    /// 控制音量大小
    /// </summary>
    /// <param name="value"></param>
    public void ChangeValue(float value)
    {
        audioSource.volume = value;
    }

    /// <summary>
    /// 控制音乐开关
    /// </summary>
    /// <param name="isOpen"></param>
    public void ChangeOpen(bool isOpen)
    {
        audioSource.mute = !isOpen;
    }
    
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameDataMgr 
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance
    {
        get { return instance; }
    }

    public MusicData musicData;
    public RankList rankData;

    private GameDataMgr()
    {
        //初始化数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;
        rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList), "Music") as RankList;

        //判断是否是第一次进入游戏,如果是第一次,那么就通过代码来手动初始化数据
        if (!musicData.notFirst)
        {
            musicData.notFirst = true;
            musicData.isOpenBK = true;
            musicData.isOpenSound = true;
            musicData.bkValue = 1;
            musicData.soundValue = 1;

            //储存数据
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
        }
    }

    //以下是提供给外部用于注册事件的函数

    //开关背景音乐
    public void OpenOrCloseBKMisic(bool isOpen)
    {
        musicData.isOpenBK = isOpen;
        BKMusic.Instance.ChangeOpen(isOpen);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");        
    }

    //开关音效
    public void OpenOrCloseSound(bool isOpen)
    {
        musicData.isOpenSound = isOpen;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音乐的大小
    public void ChangeBKValue(float value)
    {
        musicData.bkValue = value;
        BKMusic.Instance.ChangeValue(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //改变背景音效的大小
    public void ChangeSoundValue(float value)
    {
        musicData.soundValue = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");
    }

    //添加排行榜信息
    public void AddRankInfo(string name, int score, int time)
    {
        rankData.list.Add(new RankInfo(name, score, time));
        rankData.list.Sort((a, b) => a.time < b.time ? -1 : 1);

        for (int i = rankData.list.Count - 1; i >= 3; i--)
        {
            rankData.list.RemoveAt(i);
        }

        PlayerPrefsDataMgr.Instance.SaveData(rankData, "Rank");
    }
}

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值