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

Sonido y háptica

Reproduce efectos de sonido y retroalimentación háptica local.

Usa la API de SFX para reproducir efectos de sonido cortos (clics de la interfaz, pasos, impactos) y audio en bucle simple (bucles ambientales, música).

Inicio rápido (reproducir un sonido)

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

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

Referencia de la API de SFX

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;
}

Obtener un SFX_Asset

Los efectos de sonido viven en la res carpeta de tu juego (a menudo bajo res/sfx/).

  • Arrastra sonidos desde el Catálogo de recursos (el editor los descarga en res/)

  • O añade tu propio .wav archivo en res/ desde tu máquina local

Luego refiérelos por ruta:

Algunos activos integrados de la plataforma usan $AO/... rutas. Por ejemplo: get_asset(SFX_Asset, "$AO/sfx/FUI Hologram Ping Tone Echoed.wav").

Sonidos posicionales (algo 3D)

De forma predeterminada, SFX se reproduce como un sonido “2D” no posicional. Para hacerlo posicional, establece una posición:

Seguir a una entidad (fuente de sonido en movimiento)

Si un sonido debe moverse con una entidad (zumbido de motor, proyectil zumbante, etc.), establece entity_to_follow:

Si entity_to_follow está establecido, normalmente no necesitas llamar también a set_position (no pasa nada si lo haces).

Sonidos dirigidos a un jugador

Establece specific_to_player cuando el servidor deba seguir el sonido, pero solo un cliente deba oírlo realmente:

Reproducción en bucle + detención

SFX.play devuelve un ID que puedes detener más tarde:

Variación (recomendada para SFX repetitivos)

Si reproduces el mismo sonido con frecuencia (pasos, recogidas), añade una variación sutil:

Mantén volume_perturb / speed_perturb sutiles. Valores por encima de ~0.3 normalmente suenan mal.

Predicción y direccionamiento

Llama a los sonidos de jugabilidad desde la misma ruta predicha compartida que el evento que los causó. El sistema de sonido reconcilia el sonido predicho de un cliente con el resultado del servidor, así que no envuelvas SFX.play en Game.is_server() o player.is_local().

Para un sonido que solo un jugador debe oír, establece desc.specific_to_player. Esto mantiene el evento en el código de jugabilidad compartido mientras dirige la reproducción al cliente de ese jugador.

Hápticos

Haptics.play_impact activa la respuesta háptica de impacto en el dispositivo local. Llámala solo para el jugador local:

Elige .LIGHT, .MEDIUM, o .HEAVY. Los hápticos actualmente funcionan en iOS. Las llamadas en Android, web, Windows y servidores no hacen nada.

Los hápticos no se sincronizan, no se dirigen ni se deduplican. Actívalos en el punto de interacción local, en lugar de hacerlo desde código de jugabilidad a nivel de escena.

Última actualización