For the complete documentation index, see llms.txt. This page is also available as Markdown.

Звук и тактильная отдача

Воспроизводите звуковые эффекты и локальную тактильную обратную связь.

Используйте SFX API для воспроизведения коротких звуковых эффектов (клики интерфейса, шаги, удары) и простого зацикленного аудио (фоновые циклы, музыка).

Быстрый старт (воспроизвести звук)

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 {
    specific_to_player: Player;
    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);
    fade_out_and_stop :: proc(id: u64, fade_time: float);
    default_sfx_desc :: proc() -> SFX_Desc;
}

Получение SFX_Asset

Звуковые эффекты хранятся в папке res вашей игры (часто в res/sfx/).

  • Перетащите звуки из Каталог ресурсов (редактор загружает их в res/)

  • Или добавьте свой собственный .wav файл в res/ с локального компьютера

Затем обращайтесь к ним по пути:

Некоторые встроенные платформенные ассеты используют пути $AO/... Например: get_asset(SFX_Asset, "$AO/sfx/FUI Hologram Ping Tone Echoed.wav").

Пространственные (примерно 3D) звуки

По умолчанию SFX воспроизводится как непозиционный звук «2D». Чтобы сделать его позиционным, задайте позицию:

Следование за сущностью (движущийся источник звука)

Если звук должен двигаться вместе с сущностью (гул двигателя, жужжащий снаряд и т. д.), задайте entity_to_follow:

Если entity_to_follow установлено, обычно не нужно также вызывать set_position (хотя это допустимо).

Звуки, привязанные к игроку

Установите specific_to_player если сервер должен отслеживать звук, но услышать его должен только один клиент:

Зацикливание + остановка

SFX.play возвращает ID, который можно остановить позже:

Вариативность (рекомендуется для частых SFX)

Если вы часто воспроизводите один и тот же звук (шаги, подбор предметов), добавьте небольшую вариативность:

Делайте volume_perturb / speed_perturb ненавязчивыми. Значения выше ~0.3 обычно звучат неправильно.

Предсказание и таргетинг

Вызывайте игровые звуки из того же общего предсказанного пути, что и событие, которое их вызвало. Система звука согласовывает предсказанный клиентом звук с результатом сервера, поэтому не оборачивайте SFX.play в Game.is_server() или player.is_local().

Для звука, который должен услышать только один игрок, установите desc.specific_to_player. Это сохраняет событие в общем игровом коде, но направляет воспроизведение клиенту этого игрока.

Haptics

Haptics.play_impact вызывает тактильную отдачу на локальном устройстве. Вызывайте это только для локального игрока:

Выберите .LIGHT, .MEDIUM, или .HEAVY. Haptics currently work on iOS. Calls on Android, web, Windows, and servers do nothing.

Haptics не синхронизируются, не таргетируются и не дедуплицируются. Вызывайте их в точке локального взаимодействия, а не из игрового кода, охватывающего всю сцену.

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