缺陷!cocos_creator_editor_3.8.2_不能显示声音文件命名

cocos_creator_editor_3.8.2_不能显示声音文件命名_20240416181044

  • Creator 版本: 3.8.2

  • 目标平台:chrome,但问题是在cocos creator editor本身

  • 重现方式:在同一个脚本中想实现多个audiosource文件,
    在脚本中使用

====================
@property(AudioSource)

public audioSourceMark: AudioSource = null!;

@property(AudioSource)

public audioSourceUnmark: AudioSource = null!;

@property(AudioSource)

public audioSourceBoom: AudioSource = null!;

@property(AudioSource)

public audioSourceGameWin: AudioSource = null!;

@property(AudioSource)

public audioSourceGameLose: AudioSource = null!;

@property(AudioSource)

public audioSourceTipSound: AudioSource = null!;

@property(AudioSource)

public audioSourceScan: AudioSource = null!;

======================
做了声明,然后在编辑器绑定脚本,再添加多个cc.AudioSource组件
每个组件绑定一个声音文件,
再把每个cc.AudioSource组件拖入绑定在脚本中的每个声明的 @property(AudioSource)中
在脚本中控制 @property(AudioSource)对象来播放,
这一切都能正常运行!

问题来了,我绑定的 @property(AudioSource)在编辑器显示中都是一个样,就是脚本所在的节点名"Canvas" !它都是一个样,这让我后期改换声音很不方便。
还有cc.AudioSource组件之间也没有区别的标识,这也很不对啊,
建议加一个默认的用户可自定义的标识名,然后在拖绑cc.AudioSource组件后,编辑器脚本那区里的所有@property(AudioSource)位置能显示出标识名,这样就很清晰,谁绑在那个上了
也就是有标识的clip绑在audiosource上,还能看到不同声音文件的明显区别。

不知这样描述你们工作人员或高手能看懂不能,不清楚的可以直接问我,我想让cocos creator更完善。

这里不应该用AudioSource 而应该用AudioClip,AudioSource是播放音频的组件, AudioClip才是音频文件

您说的没错,我试了一下,确实应该用它.但是我想知道这个 audio source组件如何添加多个声音文件我看目前组件只能添加一个,怎么样才能以输出的方式或者其他方式添加多个声音文件呢?

你想要的是这样吗?

import { _decorator, AudioClip, AudioSource, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('AudioTest')
export class AudioTest extends Component {
    @property(AudioSource)
    public audioSource: AudioSource;

    @property(AudioClip)
    public bgm: AudioClip;

    @property(AudioClip)
    public audio1: AudioClip;

    @property(AudioClip)
    public audio2: AudioClip;

    playBgm() {
        this.audioSource.clip = this.bgm;
        this.audioSource.play();
    }


    playEffect(clip: AudioClip){
        this.audioSource.playOneShot(clip);
    }

    onClickBtn1(){
        this.playEffect(this.audio1);
    }

    onClickBtn2(){
        this.playEffect(this.audio2);
    }

    protected start(): void {
        this.playBgm();
    }
}

image
但是这样好像用起来不是很舒服。我更喜欢修改一下官方提供的那个案例。预加载好需要用到的音频,通过文件名来播放。
https://docs.cocos.com/creator/manual/zh/audio-system/audioExample.html

另外,如果直接使用audioclip, 在对象使用的方法中会有这个提示: cc.d.ts(7423, 12): 该声明曾在此处标记为已弃用。

(method) AudioClip.playOneShot(volume?: number): void

@deprecated — since v3.1.0, please use AudioSource.prototype.playOneShot() instead,
可看官方准备不让它这样用了,这要怎么办?

是的,我想要的是这个效果。
是不过在问题2中,这个audiosource能不能存放多个音效,像数组什么的一样,这样只显示audiosource的节点名也是可以接受的。

不是AudioClip.playOneShot() 是AudioSource.playOneShot(audioClip);

对于这个问题,我觉得是你没有理解AudioSource和AudioClip才会有这样的疑问。

AudioSource是一个拥有播放音频功能的组件 拥有播放 暂停 停止 BGM 和 播放一次性音效 等功能

AudioClip是资源文件就像png jpg 导入到Cocos里面他就是SoriteFrame了一样, mp3 wav这类文件导入到cocos中就是AudioClip.

image
这个地方留了个AudioClip属性应该是为了方便播放bgm 比如整个场景只有一个bgm的话 一行代码都不用写,直接这样设置就好了.AuduoSource本身没有存放多个AudioClip的功能,不过你可以继承它自己扩展。或者就像我之前一样多写一个组件用装饰器来存着就行了。

这里,你说的非常的对,关系也很清,谢谢,我现在这样写
private soundPlayer =new AudioSource();
这样用这个对像来做播放器,播放clip,这样就很顺了,谢谢!