¿Qué es?
Un complemento de Unreal Engine diseñado para admitir subtítulos y descripciones de escena desvinculadas del audio. Por ejemplo, estos nuevos subtítulos pueden recibir señales de cualquier otro sistema, independientemente de la duración del recurso de audio o del estado de reproducción relacionados. En última instancia, este nuevo sistema de subtítulos reemplazará y dejará en desuso el sistema actual, que no permite el uso independiente de subtítulos a partir de sonidos. Se pueden personalizar, entre otras cosas, los tiempos de visualización, las fuentes y los colores de los subtítulos.
¿Dónde está?
\Engine\Plugins\Experimental\SubtitlesAndClosedCaptions
Incluir: #include SubtitlesSubsystem.h
Para cargar el complemento en el editor, ve a Editar > Complementos, en la pestaña que se abre escribe el nombre o desplázate hasta Subtítulos, marca la casilla y haz clic en Reiniciar el editor.
¿Cómo se utiliza?
Cada subtítulo se almacena como un UCLASS USubtitleAssetUserData derivado de UAssetUserData y se puede subclasificar para almacenar datos personalizados adicionales en cualquier objeto de recurso de Unreal.
Miembros de USubtitleAssetUserData
Texto: el FText localizable que debe aparecer en el subtítulo.
Se admiten varias líneas de texto pulsando Mayús + Intro o incluyendo \n en el texto para especificar nuevas líneas.
Los FTexts se localizan al idioma actual en el cliente utilizando la implementación de la clave hash del sistema de localización; la localización se produce antes y de forma independiente del sistema de subtítulos.
Duration: tiempo de visualización de los subtítulos en segundos.
Por defecto: 3 segundos.
Debe ser >= 0.05 segundos.
Solo se habilita cuando el tipo de duración está configurado como
UseDurationProperty.
Tipo de duración: puede fijarse como UseDurationProperty, que habilita la propiedad Duration, o como UseSoundDuration para que se detenga automáticamente cuando finalice un sonido asociado.
UseSoundDurationsolo funciona cuando el subtítulo se añade comoAssetUserDataa un recurso deSoundBase.
StartOffset: desfase de tiempo en segundos para empezar a mostrar la línea de subtítulos.
Esto se puede utilizar para simplificar la visualización de múltiples subtítulos por recurso de audio, por ejemplo, una
SoundWavelarga con varias frases podría utilizar varios subtítulos, cada uno conStartOffsetestablecido en el desfase de tiempo del comienzo de cada frase.Por defecto: 0 segundos.
Priority: si se reproducen varios subtítulos a la vez, solo se reproducirán los que tengan la prioridad más alta (el valor más grande), en lugar de los que tengan valores más bajos.
Esto se aplica incluso si los subtítulos solo se solapan parcialmente. El solapamiento viene determinado por
StartOffsety la duración.Si se establece un nuevo subtítulo para que se muestre inmediatamente o a través de
StartOffsetmientras se muestra un subtítulo de mayor prioridad, el subtítulo de menor prioridad no se mostrará.Solo se mostrará uno de cada categoría (subtítulos, descripción de audio, etc.) a la vez.
Si dos subtítulos que compiten entre sí tienen la misma prioridad, se seguirá mostrando el más antiguo que esté en la cola. Cada vez que no se muestra un subtítulo en cola debido a un conflicto de prioridades, se envía una advertencia a los registros de depuración.
Por defecto: 1.
ESRB: clasificación ESRB de la categoría de subtítulos. Este es un campo descriptivo creado y utilizado por los desarrolladores de videojuegos.
Esto permite al autor de la llamada determinar si se debe mostrar una línea de subtítulos comprobando este valor.
Por defecto: ESRB::Everyone.
SubtitleType: especifica si el recurso es un Subtitle, un ClosedCaption o una AudioDescription. Este es un campo descriptivo creado por los desarrolladores de videojuegos.
Esto permite al autor de la llamada determinar si se debe mostrar una línea de subtítulos comprobando este valor.
Cada
SubtitleTypetiene parámetros de visualización independientes que se establecen a través de un widgetTextBlock, como se explica a continuación.Cuando se muestran, los distintos tipos de subtítulos se colocan de forma que no se solapen.
Parámetros de visualización
Los subtítulos se muestran con un widget TextBlock:
En Unreal Editor, ve a Edit > Configuración del proyecto, luego a Juego y haz clic en Subtítulos.
En el menú, utiliza el desplegable para seleccionar
DefaultSubtitleWidget.Haz clic en el icono Ir al recurso para ver el widget.
Haz doble clic en el widget para abrirlo.
El widget de subtítulos por defecto permite establecer parámetros de visualización independientes (por ejemplo, ubicación, fuente, color, opacidad, etc.) para subtítulos, subtítulos cerrados y descripciones de audio. Haz doble clic en el cuadro de texto de los subtítulos para abrir la pestaña Detalles.
Por defecto, los subtítulos se muestran en color blanco, mientras que los subtítulos cerrados y las descripciones de audio utilizan el color gris.
Acceso a blueprints
Además de los parámetros del widget USubtitleAssetUserData y TextBlock, C++ y blueprints pueden utilizar la siguiente API:
QueueSubtitle(const FQueueSubtitleParameters&, const ESubtitleTiming Timing = ESubtitleTiming::InternallyTimed)
Donde FQueueSubtitleParameters contiene:
El subtítulo, un
USubtitleAssetUserData, tal y como se explica arriba.Un parámetro opcional para anular la duración del recurso.
Si el subtítulo ya se está mostrando activamente, la duración del subtítulo activo se actualizará a la duración especificada.
Sincronización
Se establece en ESubtitleTiming::ExternallyTimed para controlar manualmente la cola y la caducidad de un subtítulo, en lugar de utilizar la duración del subtítulo. Los subtítulos con temporización externa permanecerán activos indefinidamente hasta que los elimines manualmente con StopSubtitle(). Para escenarios de Sequencer con dilatación o deformación temporal, es mejor utilizar ESubtitleTiming::ExternallyTimed y poner en cola y detener manualmente los subtítulos. Al poner en cola varios subtítulos, se muestra el más reciente de la mayor prioridad.
| Código | Resultado |
|---|---|
IsSubtitleActive (const | Devuelve true si se está mostrando el recurso de subtítulos dado. |
StopSubtitle (const | Detiene la visualización del recurso de subtítulos indicado. Esto incluye los subtítulos que aún no se muestran debido a su |
StopSubtitle() | Detiene la visualización de todos los subtítulos en cola. Esto incluye los subtítulos que aún no se muestran debido a su |
Cómo mostrar subtítulos generados dinámicamente
El FText procedente de fuentes arbitrarias (por ejemplo, replicado dinámicamente desde un servidor multijugador) se puede mostrar como subtítulos. Ejemplo:
USubtitlesSubsystem* Subsystem = NewObject<USubtitlesSubsystem>(pWorld, NAME_None, RF_Transient);
check(Subsystem != nullptr);
USubtitleAssetUserData* Subtitle = NewObject<USubtitleAssetUserData>(GetTransientPackage(), NAME_None, RF_Transient);
check(Subtitle != nullptr);
Subtitle->Text = <arbitrary FText input>;
const UAssetUserData& AssetUserData = *CastChecked<const UAssetUserData>(Subtitle);
Sequencer
Arrastra tu recurso de subtítulos a una pista de subtítulos en Sequencer. Las propiedades de los subtítulos se pueden editar haciendo clic derecho en el subtítulo y seleccionando Propiedades. En Sequencer, la duración de los subtítulos se controla mediante el intervalo de selección inicial y final, en lugar de mediante su propiedad de duración.
Localización
El sistema de subtítulos permite la localización a través de su propiedad localizable FText. Los FTexts se localizan al idioma actual en el cliente utilizando la implementación de la clave hash del sistema de localización; la localización se produce antes y de forma independiente del sistema de subtítulos. Consulta Localización de contenido en Unreal Engine | Documentación de Unreal Engine 5.5 | Comunidad de desarrolladores de Epic.
Guía de migración
La herramienta de migración copia los datos de los subtítulos de una DialogueWave o una SoundWave determinadas en el nuevo tipo de recurso Subtitle. Introduce el nuevo recurso en el AssetUserData de DialogueWave o SoundWave dados. Los subtítulos ya migrados se actualizan si la DialogueWave o SoundWave dada se migra de nuevo. Sin embargo, si la reemigración no produce ningún cambio, el recurso objetivo no se marca como dañado y no es necesario volver a guardarlo en el disco.
La migración no es destructiva; los subtítulos nuevos y antiguos se mostrarán automáticamente por defecto, permitiendo al usuario controlar qué contenido se utiliza.
Los ajustes de los parámetros de visualización (por ejemplo, fuente, color, etc.) no forman parte actualmente de la herramienta de migración. Se establecen por categoría a través de los ajustes del widget TextBlock que hemos explicado anteriormente.
Migración de SoundWaves
Para utilizar esta herramienta, selecciona uno o más recursos de SoundWave en el explorador de contenido. A continuación, haz clic derecho, busca el submenú Acciones del editor con secuencia de comandos y selecciona Crear subtítulo. Como resultado, se crearán nuevos USubtitleAssetUserData en los SoundWave que contengan los datos de los subtítulos migrados.
Cuando se desee, puedes eliminar datos del antiguo sistema de subtítulos de la siguiente forma:
Selecciona uno o más recursos
SoundWaveen el explorador de contenido.Haz clic derecho y busca el submenú Acciones del editor con secuencia de comandos.
Selecciona Eliminar subtítulos heredados, lo que vacía la matriz de subtítulos antiguos...
Migración de DialogueWaves
Después de migrar la SoundWave asociada a una DialogueWave, utiliza el comando de consola au.UseNewSubtitles 1 para verlo con este complemento de subtítulos. Puedes volver a utilizar el contenido y el sistema de subtítulos originales configurando la variable de consola a su valor por defecto de 0.
Notas de rendimiento
El uso de disco varía ligeramente entre el sistema antiguo y el nuevo. Los subtítulos migrados al nuevo sistema requieren aproximadamente 16 bytes más por subtítulo (80 bytes en el sistema antiguo y 96 bytes en el nuevo) cuando están en cola para mostrarse.
Antes (80 bytes por subtítulo en cola):
FQueueSubtitleParams: 56 bytesFSubtitleCue: Múltiplos de 24 bytes. Suponiendo que solo haya uno de estos para esta comparación.
Después (96 bytes por subtítulo en cola):
FQueueSubtitleParameters: 16 bytesUSubtitleAssetUserData: 80 bytes
Los subtítulos que no están en cola y permanecen en la memoria no utilizan las estructuras FQueueSubtitleParameters, por lo que los subtítulos «en bloque» muestran una diferencia mayor de 24 bytes (antiguo) a 80 bytes (nuevo), con una diferencia de 56 bytes debido a las propiedades y funciones adicionales.
Fuente de la herramienta de migración
Si es necesario realizar modificaciones en la herramienta de migración, esta se encuentra en la carpeta del complemento de subtítulos: SubtitlesAndClosedCaptions/Content/EditorUtilities/CreateSubtitlesFromSoundWaves.uasset
Al igual que el resto del nuevo complemento de subtítulos, la herramienta de migración se encuentra actualmente en fase experimental.