Unity笔记-声音管理器

管理器

导入消息框架(详见之前的Unity笔记),新建一个Manager文件夹,用来储存管理器。再创建一个Managers文件夹,是管理器的集合。

声音管理器

在Managers下创建脚本Managers。

1
2
3
4
5
6
7
8
9
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Managers
{
//管理器集合

}

这个类管理所有的管理器单例。下面创建一个简单的声音管理器
创建一个名为AudioManager的文件夹,里面创建一个名为AudioManager的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class AudioManager : ManagerBase
{
//环境音
private AudioSource envPlayer;

//音效
private AudioSource sePlayer;
//背景音乐
private AudioSource Player;
void Start()//初始化
{
//创建三个播放器
//背景音乐
Player = gameObject.AddComponent<AudioSource>();
Player.loop = true;
//音效
sePlayer = gameObject.AddComponent<AudioSource>();
//环境音
envPlayer = gameObject.AddComponent<AudioSource>();
//切换场景不销毁
GameObject.DontDestroyOnLoad(this.gameObject);
}

void Update()
{

}
public override byte GetMessageType()
{
return MessageType.Type_Audio;
}
//播放背景音乐 通过文件名播放 或 AudioClip播放
public void PlayMusic(string name,float volume = 1){//volume:声音大小,默认1
//通过名称播放,mp3存储在Resoures文件夹下(可能需要自己创建,大小写区分)
AudioClip clip = Resources.Load<AudioClip>(name);
PlayMusic(clip,volume);
}
public void PlayMusic(AudioClip clip,float volume=1){
//直接传入声音
Player.volume = volume;
Player.clip = clip;
if(Player.isPlaying){//是否在播放,可选,看游戏逻辑
Player.Stop();
}
Player.clip = clip;
Player.Play();
}
public void StopMusic(){
Player.Stop();
}
//改变音量
public void ChangeMusicVolume(float volume){
Player.volume = volume;
}
//播放环境音
public void PlayEnvMusic(string name,float volume){
AudioClip clip = Resources.Load<AudioClip>(name);
PlayEnvMusic(clip,volume);
}
public void PlayEnvMusic(AudioClip clip,float volume){
if(envPlayer.isPlaying){
envPlayer.Stop();
}
envPlayer.clip = clip;
envPlayer.volume = volume;
envPlayer.Play();
}
public void StopEnvMusic(){
envPlayer.Stop();
}
//音效
public void PlaySeSound(string name,float volume=1){
AudioClip clip = Resources.Load<AudioClip>(name);
PlaySeSound(clip,volume);
}
public void PlaySeSound(AudioClip clip,float volume=1){

sePlayer.PlayOneShot(clip,volume);
}
//在某个物体上面播放音效(上面是在管理器上播放)适用于3D
public void PlayerSeSoundOnObject(string name,GameObject go,float volume=1){
AudioClip clip = Resources.Load<AudioClip>(name);
PlayerSeSoundOnObject(clip,go,volume);
}
public void PlayerSeSoundOnObject(AudioClip clip,GameObject go,float volume=1){
AudioSource player = go.GetComponent<AudioSource>();
if(player == null){
player = go.AddComponent<AudioSource>();;
}
player.volume = volume;
player.PlayOneShot(clip);
}
}

然后在Managers脚本上编写:

1
2
3
4
5
6
7
8
9
10
11
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Managers
{
//管理器集合
//声音
public static AudioManager m_Audio = AudioManager.Instance.GetComponent<AudioManager>();

}