feat: 支持音频管线
This commit is contained in:
55
assets/scripts/utils/AudioManager.ts
Normal file
55
assets/scripts/utils/AudioManager.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { AudioClip, AudioSource, Node } from 'cc';
|
||||
|
||||
/**
|
||||
* 音效管理器
|
||||
* 统一管理全局按钮点击等通用音效,避免页面各自维护 AudioSource。
|
||||
*/
|
||||
export class AudioManager {
|
||||
private static _instance: AudioManager | null = null;
|
||||
|
||||
private _clickAudio: AudioClip | null = null;
|
||||
private _hostNode: Node | null = null;
|
||||
private _audioSource: AudioSource | null = null;
|
||||
|
||||
static get instance(): AudioManager {
|
||||
if (!this._instance) {
|
||||
this._instance = new AudioManager();
|
||||
}
|
||||
return this._instance;
|
||||
}
|
||||
|
||||
private constructor() {}
|
||||
|
||||
init(clickAudio: AudioClip | null, hostNode: Node | null): void {
|
||||
this._clickAudio = clickAudio;
|
||||
this._hostNode = hostNode;
|
||||
this._audioSource = null;
|
||||
}
|
||||
|
||||
playButtonClick(): void {
|
||||
this._playOneShot(this._clickAudio);
|
||||
}
|
||||
|
||||
private _playOneShot(clip: AudioClip | null): void {
|
||||
if (!clip) {
|
||||
return;
|
||||
}
|
||||
|
||||
const audioSource = this._ensureAudioSource();
|
||||
audioSource?.playOneShot(clip);
|
||||
}
|
||||
|
||||
private _ensureAudioSource(): AudioSource | null {
|
||||
if (this._audioSource?.isValid) {
|
||||
return this._audioSource;
|
||||
}
|
||||
|
||||
if (!this._hostNode?.isValid) {
|
||||
console.warn('[AudioManager] 未初始化宿主节点,无法播放音效');
|
||||
return null;
|
||||
}
|
||||
|
||||
this._audioSource = this._hostNode.getComponent(AudioSource) ?? this._hostNode.addComponent(AudioSource);
|
||||
return this._audioSource;
|
||||
}
|
||||
}
|
||||
9
assets/scripts/utils/AudioManager.ts.meta
Normal file
9
assets/scripts/utils/AudioManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "2dc839e1-6bb2-4d35-a2c4-bf90f85f40e8",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user