Was ist das?
Ein Unreal Engine-Plugin, das Untertitel, Untertitel für Hörgeschädigte und Szenenbeschreibungen unterstützt, die vom Ton entkoppelt sind. Diese neuen Untertitel können zum Beispiel von jedem anderen System aus aufgerufen werden, unabhängig von der Dauer der zugehörigen Audioelemente oder dem Wiedergabestatus. Dieses neue Untertitelsystem wird letztendlich das bestehende System ersetzen und ablösen, das die unabhängige Verwendung von Untertiteln ohne Ton nicht unterstützt. Du kannst den Zeitpunkt der Anzeige von Untertiteln, Schriftarten, Farben usw. anpassen.
Wo ist es?
\Engine\Plugins\Experimental\SubtitlesAndClosedCaptions
Include: #include SubtitlesSubsystem.h
Um das Plugin in den Editor zu laden, geh zu Edit > Plugins, gib im Tab, das sich öffnet, den Namen ein oder scroll zu Subtitles and Closed Captions, setz das Kontrollkästchen und klick auf Restart the Editor.
Wie verwende ich es?
Jeder Untertitel wird als USubtitleAssetUserData UCLASS gespeichert, die von UAssetUserData abgeleitet ist und untergeordnet werden kann, um zusätzliche benutzerdefinierte Daten für jedes Unreal-Assetobjekt zu speichern.
USubtitleAssetUserData-Mitglieder
Text: Der lokalisierbare FText, der im Untertitel erscheinen soll.
Mehrzeilige Texte werden mit Umschalt + Eingabe oder durch Einfügen von \n im Text für neue Zeilen unterstützt.
Die FTexte werden mit Hilfe der Hashkey-Implementierung des Lokalisierungssystems in die aktuelle Sprache auf dem Client lokalisiert – die Lokalisierung erfolgt vor und unabhängig vom Untertitel-System.
Duration: Anzeigen des Untertitels in Sekunden.
Standard: 3 Sekunden.
Muss >= 0.05 Sekunden sein.
Ist nur aktiviert, wenn "Duration Type" auf
UseDurationPropertyeingestellt ist.
Duration Type: Kann auf UseDurationProperty eingestellt werden, was die Duration-Eigenschaft aktiviert, oder auf UseSoundDuration, um automatisch anzuhalten, wenn ein angehängter Sound endet.
UseSoundDurationfunktioniert nur, wenn der Untertitel alsAssetUserDatazu einemSoundBase-Asset hinzugefügt wird.
StartOffset: Zeitversatz in Sekunden bis zum Start der Anzeige der Untertitelzeile.
Dies kann verwendet werden, um die Anzeige mehrerer Untertitel pro Audio-Asset zu vereinfachen, z. B. eine lange
SoundWavemit mehreren Sätzen könnte mehrere Untertitel verwenden, die jeweils mitStartOffsetauf den Zeitversatz des Beginns eines jeden Satzes eingestellt sind.Standard: 0 Sekunden.
Priority: Wenn mehrere Untertitel gleichzeitig abgespielt werden, werden nur die mit der höchsten (größten Wert) Priorität gespielt, und nicht die mit niedrigeren Werten.
Das gilt selbst dann, wenn die Untertitel sich nur teilweise überlappen. Überlappung wird aus
StartOffsetund Dauer bestimmt.Wenn ein neuer Untertitel sofort oder über
StartOffsetzur Anzeige gebracht wird, während ein Untertitel mit höherer Priorität angezeigt wird, wird der Untertitel mit niedrigerer Priorität nicht angezeigt.Es wird nur einer von jeder Kategorie (Untertitel, Audiobeschreibung usw.) zeitgleich angezeigt.
Haben zwei konkurrierende Untertitel die gleiche Priorität, wird der älteste in der Warteschlange weiterhin angezeigt. Immer wenn ein Untertitel in der Warteschlange aufgrund eines Prioritätskonflikts nicht angezeigt wird, wird eine Warnung an das Debug-Log gesendet.
Standard: 1.
ESRB: ESRB-Bewertung der Kategorie. Dies ist ein beschreibendes Feld, das von Spieleentwicklern festgelegt und verwendet wird.
Dies ermöglicht es dem Aufrufer, zu bestimmen, ob eine Untertitelzeile angezeigt werden soll, indem er diesen Wert prüft.
Standard: ESRB:: Everyone.
SubtitleType: Gibt an, ob es sich bei dem Asset um einen Subtitle, ClosedCaption oder AudioDescription handelt. Dies ist ein beschreibendes Feld, das von Spieleentwicklern gesetzt wird.
Dies ermöglicht es dem Aufrufer, zu bestimmen, ob eine Untertitelzeile angezeigt werden soll, indem er diesen Wert prüft.
Jeder
SubtitleTypehat unabhängige Anzeigeparameter, die über einTextBlock-Widget eingestellt werden, wie unten dokumentiert.Verschiedene Untertiteltypen werden bei der Anzeige so positioniert, dass sie sich nicht überlappen.
Anzeigeparameter
Untertitel werden mit einem TextBlock-Widget angezeigt:
Gehe im Unreal Editor zu Edit > Project Settings, scrolle zu Game und klicke auf Subtitles and Closed Captions.
Verwende im Menü die Dropdown-Liste und wähle
DefaultSubtitleWidgetaus.Klicke auf Browse to Asset, um das Widget anzuzeigen.
Doppelklicke auf das Widget, um es zu öffnen.
Das Standard-Untertitel-Widget erlaubt unabhängige Anzeigeparameter (z. B. Platzierung, Schriftart, Farbe, Opazität usw.) für Untertitel, Untertitel für Hörgeschädigte und Audiobeschreibungen. Doppelklicke in das Untertitel-Textfeld, um den Tab Details zu öffnen.
Untertitel werden standardmäßig in weiß angezeigt, während ClosedCaptions und AudioDescriptions in grauer Schriftart sind.
Blueprint-Zugang
Neben USubtitleAssetUserData und den TextBlock-Widget-Parametern ist die folgende API für die Verwendung in C++ und Blueprints verfügbar:
QueueSubtitle(const FQueueSubtitleParameters&, const ESubtitleTiming Timing = ESubtitleTiming::InternallyTimed)
Dabei enthält FQueueSubtitleParameters:
Den Untertitel, ein
USubtitleAssetUserData, wie oben dokumentiert.Einen optionalen Parameter zum Überschreiben der Asset-Dauer.
Wenn der Untertitel bereits aktiv angezeigt wird, wird die Dauer des aktiven Untertitels auf die angegebene Dauer aktualisiert.
Zeitsteuerung
Setze auf ESubtitleTiming::ExternallyTimed, um die Einreihung in die Warteschlange und den Ablauf eines Untertitels manuell zu steuern, anstatt die Dauer des Untertitels zu nutzen. Extern getimte Untertitel bleiben unbegrenzt aktiv, bis du sie manuell mit StopSubtitle() entfernst. Für Sequencer-Szenarien mit Zeitdehnung oder Warping ist es am besten, ESubtitleTiming::ExternallyTimed zu verwenden und Untertitel manuell in die Warteschlange einzufügen und anzuhalten. Bei der Warteschlange für mehrere Untertitel wird die neueste der höchsten Priorität angezeigt.
| Code | Ergebnis |
|---|---|
IsSubtitleActive (const | Gibt "true" aus, wenn das entsprechende Untertitel-Asset angezeigt wird. |
StopSubtitle (const | Stoppt die Anzeige des jeweiligen Untertitel-Assets. Das schließt Untertitel ein, die aufgrund ihres |
StopSubtitle() | Stoppt die Anzeige aller Untertitel in der Warteschlange. Das schließt Untertitel ein, die aufgrund ihres |
Dynamisch generierte Untertitel anzeigen
FText aus beliebigen Quellen (z. B. dynamisch von einem Mehrspieler-Server repliziert) kann als Untertitel angezeigt werden. Beispiel:
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
Zieh dein Untertitel-Asset auf einen Untertitel-Track im Sequencer. Die Untertitel-Eigenschaften kannst du anschließend bearbeiten, indem du mit der rechten Maustaste auf den Untertitel klickst und Properties auswählst. Im Sequencer wird die Dauer des Untertitels durch den Beginn und das Ende des Auswahlbereichs gesteuert und nicht durch die Duration-Eigenschaft.
Lokalisierung
Das System unterstützt Lokalisierung über seine lokalisierbare FText-Eigenschaft. Die FTexte werden mit Hilfe der Hashkey-Implementierung des Lokalisierungssystems in die aktuelle Sprache auf dem Client lokalisiert – die Lokalisierung erfolgt vor und unabhängig vom Untertitel-System. Siehe Inhaltslokalisierung in der Unreal Engine | Unreal Engine 5.5 Dokumentation | Epic Entwickler-Community.
Migrationsleitfaden
Das Migrationstool kopiert die Untertiteldaten in einer bestimmten DialogueWave und/oder SoundWave in den neuen Subtitle-Asset-Typ. Damit wird das neue Asset in die AssetUserData des entsprechenden DialogueWave und/oder SoundWave aufgenommen. Bereits migrierte Untertitel werden aktualisiert, wenn die entsprechende DialogueWave und/oder SoundWave erneut migriert wird. Wenn die Remigration jedoch zu keiner Änderung führt, wird das Ziel-Asset nicht als geändert markiert und muss nicht erneut auf der Festplatte gespeichert werden.
Die Migration ist nicht-destruktiv; alte und neue Untertitel werden standardmäßig automatisch angezeigt, wodurch der Nutzer steuert, welcher Inhalt verwendet wird.
Anzeigen von Parametereinstellungen (z. B. Schriftart, Farbe usw.) sind derzeit nicht Teil des Migrationstools. Diese werden über die oben dokumentierten Einstellungen des TextBlock-Widgets nach Kategorie eingerichtet.
SoundWaves migrieren
Wähle für die Verwendung des Tools ein oder mehrere SoundWave-Assets im Inhaltsbrowser aus. Rechtsklicke dann und suche das Untermenü Scripted Editor Actions, und wähle Create Subtitle aus. Dadurch werden neue USubtitleAssetUserData für die SoundWaves erstellt, die die migrierten Untertiteldaten enthalten.
Bei Bedarf können so Daten aus dem alten Untertitel-System entfernt werden:
Wählen Sie ein oder mehrere
SoundWave-Elemente im Inhaltsbrowser aus.Rechtsklicke und suche das Untermenü Scripted Editor Actions.
Wähle Remove Legacy Subtitles, wodurch das alte Untertitel-Array geleert wird.
Migrieren von DialogueWaves
Verwende nach der Migration der mit einer DialogueWave verbundenen SoundWave den Konsolenbefehl au.UseNewSubtitles 1, um sie mit diesem Untertitel-Plugin anzuzeigen. Du kannst wieder zum ursprünglichen Inhalts- und Untertitelsystem zurückkehren, indem du die Konsolenvariable auf ihren Standardwert 0 zurücksetzt.
Performance-Hinweise
Die Festplattennutzung variiert leicht zwischen dem alten und dem neuen System. Untertitel, die auf das neue System migriert wurden, benötigen etwa 16 Byte mehr pro Untertitel (80 Byte im alten System, 96 Byte im neuen System), wenn sie in die Warteschlange für die Anzeigen gestellt werden.
Vorher (80 Bytes pro Untertitel in der Warteschlange):
FQueueSubtitleParams: 56 BytesFSubtitleCue: Ein Vielfaches von 24 Bytes. Wir nehmen nur einen davon für diesen Vergleich an.
Nachher (96 Bytes pro Warteschlangen-Untertitel):
FQueueSubtitleParameters: 16 BytesUSubtitleAssetUserData: 80 Bytes
Nicht in der Warteschlange befindliche Untertitel, die sich im Speicher befinden, verwenden die FQueueSubtitleParameters-Strukturen nicht, so dass bei "Massen"-Untertiteln ein größerer Unterschied von 24 Byte (alt) zu 80 Byte (neu) zu verzeichnen ist, mit einer Differenz von 56 Byte auf Grund der zusätzlichen Eigenschaften und Funktionen.
Migrationstool-Quellcode
Sollten Anpassungen am Werkzeug nötig sein, befindet es sich im Ordner des Untertitel-Plugins: SubtitlesAndClosedCaptions/Content/EditorUtilities/CreateSubtitlesFromSoundWaves.uasset
Wie der Rest des neuen Untertitel-Plugins ist das Werkzeug derzeit als experimentell eingestuft.