unity制作五子棋——音效部分总结

业务关系:
运行游戏时,背景音乐响起。在对弈界面存在设置按钮,点击可进入调整背景音乐的界面,
当点击“古琴版”时,背景音乐更换为“平沙落雁——古琴版”,当点击“复原”按钮时,音乐更
换为“平沙落雁——琴箫版”

  • 在Camera部分挂上SoundPlay脚本,使得整个游戏使用过程都存在背景音乐

代码部分

/*定义部分*/

//用private定义用于控制声音的AudioSource组件
    private AudioSource _audioSource;
//用public定义AudioClip,将准备好的MP3格式的平沙落雁琴萧合奏版拉入此处
    public AudioClip QinXiao;
//用public定义AudioClip,将准备好的MP3格式的平沙落雁古琴合奏版拉入此处
    public AudioClip GuQin;

void Awake()
    {
        //在添加此脚本的对象中添加AudioSource组件,此处为摄像机
        _audioSource = this.gameObject.AddComponent<AudioSource>();
        //设置循环播放
        _audioSource.loop = true;
        //设置音量为最大,区间在0-1之间
        _audioSource.volume = 500.0f;
        //初始AudioSource播放琴箫版
        _audioSource.clip = QinXiao;
        isPlayMusic = true;
        //初始化时播放音乐,使得一登陆游戏便奏起背景音乐
        _audioSource.Play();
        //设置音乐的前端部分初始为不可见,否则每个界面都出现
        showMenu = false;
        isQinXiao = true;
    }
  
  private void Start()
    {
	    //由于下文的Toggle部分的逻辑原因,使得需要设置“复原”button
	    //点击按钮,背景音乐转换为初始化时的琴箫版
        sureBtn.onClick.AddListener(() =>
        {
                isQinXiao = true;
                isGuQin = false;
                _audioSource.clip = QinXiao;
                isPlayMusic = true;
                //必须先让播放源暂停才能再次调用Play方法。
                //因为如果此时已经在播放,再次调用Play方法,播放源会不再工作
                _audioSource.Pause();
                _audioSource.Play();
            
        });
    }
   
   void Update()
    {
        if(isPlayMusic == false) _audioSource.Pause();
        //由于初始化选择“琴箫版”,即古琴版的Toggle为true
        //所以当点击“古琴版”,“琴箫版”Toggle为false
        //因为此处业务是切换背景音乐,两者是非此即彼关系
        if(isGuQin)
        {
            isQinXiao= false;
            _audioSource.clip = Guqin;
            isPlayMusic = true;
            _audioSource.Pause();
            _audioSource.Play();
        }

    }

	void OnGUI()
    {
        if (showMenu)
        {
            //绘制播放按钮并设置其点击后的处理
            if (GUI.Button(new Rect(100, 10, 80, 30), "Play"))
            {
                //播放声音
                if (isPlayMusic)
                {
                    _audioSource.Pause();
                    _audioSource.Play();
                }
            }
            //绘制暂停按钮并设置其点击后的处理
            if (GUI.Button(new Rect(100, 50, 80, 30), "Pause"))
            {
                //暂停声音,暂停后再播放,则声音为继续播放
                _audioSource.Pause();
            }
            //绘制停止按钮并设置其点击后的处理
            if (GUI.Button(new Rect(100, 90, 80, 30), "Stop"))
            {
                //停止播放,停止后再播放,则声音为从头播放
                _audioSource.Stop();
            }

            //音量控制Label
            GUI.skin.label.fontSize = 15;
            GUI.color = Color.black;
            GUI.Label(new Rect(100, 130, 100, 30), "音量大小调节");
            //音量控制slider
            _audioSource.volume = GUI.HorizontalSlider(new Rect(210, 136, 100, 20), _audioSource.volume, 0.0f, 1.0f);
            //选择是否播放背景音乐
            isQinXiao = GUI.Toggle(new Rect(100, 170, 100, 20), isQinXiao, "琴箫版");
            //选择是否播放按键声音
            isGuQin = GUI.Toggle(new Rect(210, 170, 100, 20), isGuQin, "古琴版");
        }
    }
  • 在Sound部分,挂上JmpToSoundPlay脚本,该脚本作用是调用并更改SoundPlay脚本的showMenu变量
/*定义部分*/
	//定义SoundPlay类,在Unity将SoundPlay脚本挂上
	public SoundPlay sp;
	//定义GameObject类,在Unity将Main Camera挂上
    public GameObject _camera;

	private void Awake()
    {
	    /实例化SoundPlay,使其指向游戏的播放源
        sp = _camera.GetComponent<SoundPlay>();
        sp.showMenu = true;
    }