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 обычно звучат неправильно.

Сервер vs клиент (сеть + предсказание)

SFX можно воспроизводить с любой стороны, в зависимости от цели:

  • Авторитетные игровые события (это должны услышать все): воспроизводите на сервере

  • Локальная/интерфейсная обратная связь (только локальный игрок): воспроизводите на клиенте

Пример: авторитетный позиционный SFX:

Последнее обновление