【unity基础框架】声音系统

阅读: 评论:0

【unity基础框架】声音系统

【unity基础框架】声音系统

声音系统,管理音效

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SoundManager : SingletonMono<SoundManager>
{private AudioSource backgroundMusic = null;private float backgroundValue = 1;private float soundValue = 1;private GameObject soundObj = null;private List<AudioSource> soundList = new List<AudioSource>();public SoundManager(){MonoMgr.GetInstance().AddUpdateListener(SoundUpdate);}public void SoundUpdate(){for (int i = soundList.Count - 1; i > 0; i--){if (!soundList[i].isPlaying){GameObject.Destroy(soundList[i]);soundList.RemoveAt(i);}}}public void PlayBackgroundMusic(string name){if (backgroundMusic == null){GameObject obj = new GameObject("backgroundMusic");backgroundMusic = obj.AddComponent<AudioSource>();}//异步加载背景音乐并且加载完成后播放ResManager.GetInstance().LoadAysnc<AudioClip>("Music/" + name, (clip) =>{backgroundMusic.clip = clip;backgroundMusic.loop = true;backgroundMusic.volume = backgroundValue;backgroundMusic.Play();});}public void ChangeBackgroundMusicValue(float v){backgroundValue = v;if (backgroundMusic == null)return;backgroundMusic.volume = backgroundValue;}public void PauseBackgroundMusic(){if (backgroundMusic == null)return;backgroundMusic.Pause();}public void StopBackgroundMusic(){if (backgroundMusic == null)return;backgroundMusic.Stop();}public void PlaySound(string name, bool isLoop, Action<AudioSource> callback = null){if (soundObj == null){soundObj = new GameObject();soundObj.name = "Sounds";}AudioSource source = soundObj.AddComponent<AudioSource>();ResManager.GetInstance().LoadAysnc<AudioClip>("Music/" + name, (clip) =>{source.clip = clip;source.loop = isLoop;source.volume = soundValue;source.Play();//音效异步加载结束后,将这个音效组件加入集合soundList.Add(source);if (callback != null)callback(source);});}public void ChangeSoundValue(float v){soundValue = v;for (int i = 0; i < soundList.Count; i++){soundList[i].volume = v;}}public void StopSound(AudioSource source){if (soundList.Contains(source)){soundList.Remove(source);source.Stop();GameObject.Destroy(source);}}}

核心:

1.背景音乐:专门的AudioSource存储bgm,在调用方法后创建声音对象。

2.普通音效:list存储audiosource,在调用后通过update检查是否播放完毕,播放完毕则移除list并销毁。

PlayBackgroundMusic播放名字的音乐
ChangeBackgroundMusicValue修改背景音乐音量
PauseBackgroundMusic暂停背景音乐
StopBackgroundMusic停止背景音乐
PlaySound播放音效
ChangeSoundValue修改音效的音量
StopSound停止音效

测试: 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SoundTest : MonoBehaviour
{private bool isPlayBackgroundMusic = false;private bool isPlaySound = false;// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0) && !isPlayBackgroundMusic){isPlayBackgroundMusic = true;SoundManager.GetInstance().PlayBackgroundMusic("BGM");}if (Input.GetMouseButtonDown(0) && !isPlaySound){isPlaySound = true;SoundManager.GetInstance().PlaySound("BGM", false);}}
}

本文发布于:2024-01-31 19:07:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669923730701.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:框架   声音   基础   系统   unity
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23