CCC 3.4.2 怎么播放音频?我想在销毁怪物节点的时候播放死亡音频。

官网的代码 要先封装什么的 没太明白

CCC 2.0版本简单多了 一行代码 然后拖拽

3.x 目前需要通过 AudioSource 组件来播放音频

背景音乐我直接添加播放, 但是 死亡的音效 我需要节点销毁再播放。这???

可以通过一个常驻节点来专门播放死亡音效

预格式化文本将缩进 4 格`import { _decorator, Component, AudioClip, AudioSource } from 'cc';

const { ccclass, property } = _decorator;

// clipdict数据接口
interface IAudioClip {
[name: string]: AudioClip;
}

@ccclass(‘CommonAudioManger’)
export class CommonAudioManger extends Component {

@property([AudioClip])
public audioClips: AudioClip[] = [];

private _clipDict: IAudioClip = {};
private _audioSource: AudioSource = null!;
start () {
    // 将音频资源存起来
    for(let i=0; i<this.audioClips.length; i++){
        let element = this.audioClips[i];
        this._clipDict[element.name] = element;
    }
    this._audioSource = this.getComponent(AudioSource);
}

/**
 * @def 音效.只播放一次
 * @param name 音频名,不用加后缀
 */
public play(name: string){
    const clip = this._clipDict[name];
    if(clip !== undefined){
        this._audioSource.playOneShot(clip);
    }
}` 在你的常驻跟节点 挂上这个脚本即可, 哪里需要播放声音 调用接口就行了

后续有计划加入纯代码控制的实现吗? 或者说是cc.audioEngine替代品。
我想不通为什么要移除cc.audioEngine, 能稍微给个解释吗。

现在的就能实现纯代码控制,AudioSource依赖的节点不需要加载也能播放音效。
比如这样子:

1赞

3.4.2音频控制的完整代码:
AudioMgr.zip (1.4 KB)

1赞

感谢大佬 ,我后面试下这个方案。

我现在是 一个音频控制器代码 然后另外一个脚本导入, 然后 把属性组件放上音频

import { _decorator, Component, Node, AudioSource,resources, AudioClip} from ‘cc’;

export class audioManagement{
private constructor(){

}
static instance :audioManagement = null;
static getInstance(){
    if(this.instance){
        return this.instance;
    }else{
        let audio = new audioManagement();
        this.instance = audio;
    }
}
audioSoureCom:AudioSource = new AudioSource();
//播放音效
playSoundEffect(url){
    this.loadAudio(url).then((clip)=>{
        console.log('加载成功');
        this.audioSoureCom.clip = clip;
        this.audioSoureCom.playOneShot(clip,1);
    })
}
//加载音乐文件
loadAudio(url){
    let promise = new Promise<AudioClip>((resolve,reject)=>{
        resources.load(url,(err,clip:AudioClip)=>{
            if(err){
                reject(err);
                return;
            }
            resolve(clip);
        })
    });
    return promise;
}

}

还是老话,前人栽树后人乘凉,感谢大佬们支持