volume-high音效

播放一次性和位置音效(以及简单的循环音频)。

使用 SFX API 播放短音效(UI 点击、脚步声、撞击声)以及简单的循环音频(环境循环、音乐)。

circle-exclamation

快速开始(播放声音)

click := get_asset(SFX_Asset, "sfx/click.wav");

desc := SFX.default_sfx_desc();
SFX.play(click, desc);

SFX API 参考

SFX_Asset :: class : Asset {}

SFX_Channel :: enum {
    SFX;
    MUSIC;
}

SFX_Desc :: struct {
    positional:       bool;
    position:         v2 #read_only;
    delay:            float;
    volume:           float;
    speed:            float;
    volume_perturb:   float;
    speed_perturb:    float;
    range_multiplier: float;
    loop_timeout:     float;
    entity_to_follow: u64;
    loop:             bool;
    channel:          SFX_Channel;

    set_position :: method(p: v2);
}

SFX :: struct {
    play            :: proc(asset: SFX_Asset, desc: SFX_Desc) -> u64;
    stop            :: proc(id: u64);
    default_sfx_desc :: proc() -> SFX_Desc;
}

获取一个 SFX_Asset

音效位于你游戏的 res 文件夹中(通常在 res/sfx/).

  • 资源目录 拖入音效(编辑器会将它们下载到 res/)

  • 或者添加你自己的 .wav 文件到 res/ 从你的本地机器

然后通过路径引用它们:

circle-exclamation
circle-info

一些内置的平台资源通过 $AO/... 路径引用。例如: get_asset(SFX_Asset, "$AO/click.wav").

定向(类似 3D)的声音

默认情况下,SFX 以非定向的“2D”声音播放。要让它成为定向声音,请设置一个位置:

跟随实体(移动的声音源)

如果某个声音应该随实体移动(引擎嗡鸣声、嗡嗡作响的投射物等),请设置 entity_to_follow:

circle-info

如果 entity_to_follow 已设置,通常就不需要再调用 set_position (如果你调用了也没关系)。

循环 + 停止

SFX.play 会返回一个 ID,你之后可以停止它:

circle-exclamation

变化(推荐用于频繁触发的 SFX)

如果你频繁播放同一种声音(脚步声、拾取声),请加入轻微变化:

circle-info

保持 volume_perturb / speed_perturb 的变化要轻微。超过约0.3 的值通常听起来不对。

服务器与客户端(网络 + 预测)

根据用途,SFX 可以从任一端播放:

  • 权威性游戏事件 (所有人都应该听到):在 上返回

  • 本地/UI 反馈 (仅本地玩家):在 客户端

示例:权威性的定向 SFX:

最后更新于