Para ayudarte a depurar el juego, puedes mostrar ciertos datos del juego con fines de prueba, ocultando esa información al jugador. Una forma de hacerlo es el registro, pero puedes mostrar algunos datos del juego de una forma más visual con la API de Dibujado de depuración.
Mediante esta API puedes dibujar formas básicas y establecer su ubicación, tamaño, color y el tiempo que aparecen en pantalla. Por ejemplo, puede que quieras visualizar el alcance de visibilidad de un PNJ o la distancia desde la que puede escucharse el audio desde su punto de origen. Con la forma de depuración de caja, podrías dibujar una caja con dimensiones y ubicación que coincidan con cualquier volumen, aunque ese volumen sea invisible en tu juego. Esto puede ayudar a calcular la colocación de volúmenes con determinados efectos.
La forma de la flecha de depuración dibujada desde la cara de un PNJ hasta el límite de su alcance de visibilidad puede utilizarse para ayudar a diseñar la colocación perfecta de los guardias.
Cómo habilitar el dibujado de depuración de Verse
El primer paso es asegurarte de que puedes ver las formas que dibujas.
-
Selecciona Configuración de la isla en el esquematizador de UEFN.
-
En la barra de búsqueda del panel de detalles, escribe depurar. Esto filtrará los resultados a la categoría Opciones de usuario - Depuración.
-
Haz clic en Depuración y luego en Dibujado de depuración de Verse para activar las funciones de depuración y dibujado de depuración de Verse.
El Dibujado de depuración de Verse solo estará activo durante una sesión de juego de UEFN. Se activa por usuario, lo que significa que solo verán las formas de depuración aquellos que hayan activado Depuración y Dibujado de depuración de Verse. Las formas de depuración no aparecerán en el visor de UEFN ni en una isla publicada, aunque esta opción esté marcada en Configuración de la isla.
Cómo dibujar tu primera forma de depuración
Para dibujar tu primera forma con la API de Dibujado de depuración, sigue estos pasos.
-
Añade esta expresión de importación a tu archivo de Verse.
using { /UnrealEngine.com/Temporary/Diagnostics }
-
Crea un canal declarando una subclase que herede del tipo
debug_draw_channel
. Los canales sirven para agrupar formas relacionadas. Son opcionales, pero es buena idea utilizarlos. Hay funciones de la API de Dibujado de depuración que puedes utilizar para mostrar, ocultar o borrar muchas formas a la vez, pero mostrar y ocultar solo funcionan en el canal.my_debug_draw := class(debug_draw_channel) {}
-
Declara una nueva constante de tipo
debug_draw
. Este será el objeto que utilices para llamar a los métodos para dibujar formas. Este ejemplo muestra el uso del parámetroChannel
(creado en el paso anterior), pero es opcional.DebugDraw:debug_draw = debug_draw{Channel := my_debug_draw}
-
Llama al método
DrawSphere
. Este ejemplo utiliza dos parámetros.
-
Center:= vector3{Z:= 150.0}
: Es un parámetro obligatorio de tipo vector3 que establece la posición del centro de la esfera. En este ejemplo, utilizarás el constructor de tipovector3
para crear un valor literal. Esto fijará el centro de la esfera en la posición0.0, 0.0, 150.0
. -
?DrawDurationPolicy:= debug_draw_duration_policy.Persistent
: Este parámetro es opcional, pero su valor predeterminado hará que la esfera desaparezca al cabo de unos segundos, por lo que deberás establecerlo en la política Persistent. Esto significa que la esfera permanecerá visible en la isla hasta que sea ocultada o borrada por otro código.DebugDraw.DrawSphere(Center := vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Después de compilar tu código de Verse e iniciar una sesión, deberías ver aparecer una esfera en el lugar establecido por el parámetro Center
.
Formas
Con la API de Dibujado de depuración, puedes dibujar varias formas que aparecen como simples estructuras alámbricas en una sesión de UEFN en ejecución. Cada forma es útil en diferentes situaciones. En las secciones siguientes se explican los métodos para dibujar cada forma y los parámetros propios de cada método. En una sección posterior se explican los parámetros comunes a todos los métodos. Cada ejemplo de código de esta sección supone que has añadido el código de Cómo dibujar tu primera forma de depuración en tu archivo de Verse.
Caja
Utiliza el método DrawBox()
para dibujar un cubo.
DebugDraw.DrawBox(vector3{Z:=150.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Center:vector3 | Establece el centro de la caja. |
Rotation:rotation | Establece cómo se gira la caja. |
?Extent:vector3 | Establece la longitud, anchura y profundidad de la caja. |
Cápsula
Utiliza el método DrawCapsule()
para dibujar una cápsula. Una cápsula está formada por un cilindro con la mitad de una esfera en cada extremo.
DebugDraw.DrawCapsule(vector3{Z:=200.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Center:vector3 | Establece el centro de la cápsula. |
Rotation:rotation | Establece cómo se gira la cápsula. |
?Height:float | Establece la longitud de la cápsula. |
?Radius:float | Establece el radio de la cápsula en su punto más ancho. |
Esfera
Utiliza el método DrawSphere()
para dibujar una esfera.
DebugDraw.DrawSphere(vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Center:vector3 | Establece el centro de la esfera. |
?Radius:float | Establece el radio de la esfera en su punto más ancho. |
?NumSegments:int | Establece el número de líneas que componen la esfera. |
Cono
Utiliza el método DrawCone()
para dibujar un cono.
DebugDraw.DrawCone(vector3{Z:=150.0}, vector3{Z:=-1.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Origin:vector3 | Establece la ubicación del punto del cono. |
Direction:vector3 | Establece la dirección en la que se abre el cono. |
?Height:float | Establece la longitud del cono. |
?NumSides:int | Establece el número de lados. |
?AngleWidthRadians:float | Establece la anchura del cono en la dirección X. |
?AngleHeightRadians:float | Establece la anchura del cono en la dirección Y. |
Para que el fondo de tu cono sea un círculo perfecto, AngleWidthRadians
y AngleHeightRadians
deben ser iguales.
Cilindro
Utiliza el método DrawCylinder()
para dibujar un cilindro.
DebugDraw.DrawCylinder(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Start:vector3 | Establece la ubicación de un extremo del cilindro. |
End:vector3 | Establece la ubicación del otro extremo del cilindro. |
?NumSegments:int | Establece el número de líneas que conectan un extremo del cilindro con otro. |
?Radius:float | Establece el radio de los dos círculos que forman cada extremo del cilindro. |
Línea
Utiliza el método DrawLine()
para dibujar una línea.
DebugDraw.DrawLine(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Start:vector3 | Establece la ubicación de un extremo de la línea. |
End:vector3 | Establece la ubicación del otro extremo de la línea. |
Flecha
Utiliza el método DrawArrow()
para dibujar una flecha.
DebugDraw.DrawArrow(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Start:vector3 | Establece la ubicación del inicio de la flecha. |
End:vector3 | Establece la ubicación de la cabeza de la flecha. |
?ArrowSize:float | Establece la longitud de las dos líneas que forman la cabeza de la flecha. |
Punto
Utiliza el método DrawPoint()
para dibujar un punto.
DebugDraw.DrawPoint(vector3{Z:=200.0}, ?Thickness:= 10.0, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Parámetro único | Qué hace |
---|---|
Position:vector3 | Establece la ubicación del punto. |
El valor predeterminado de Thickness
de DrawPoint
es demasiado pequeño para ser visible. Establece Thickness
a un valor mayor, como se muestra en el ejemplo anterior, para ver el punto.
Parámetros comunes
Estos parámetros son comunes a todos los métodos que dibujan formas. También son todos opcionales, y no es necesario incluirlos como argumentos al llamar a un método. Si decides incluirlos, asegúrate de utilizar el nombre del parámetro precedido de un ?
. Consulta Cómo llamar a funciones en funciones para más información sobre los argumentos con nombre y opcionales.
Color
Establece el color de las formas utilizando el parámetro Color
. Los valores deben ser del tipo color
. La lista de colores válidos se encuentra en el módulo NamedColors. Asegúrate de que la expresión de importación del módulo Colors
se encuentra en la parte superior de tu archivo de Verse. A continuación se muestra un ejemplo de configuración de un punto en un color diferente.
DebugDraw.DrawPoint(Position := vector3{Z:= 200.0}, ?Thickness := 20.0, ?Color := NamedColors.MediumSeaGreen)
DrawDurationPolicy
DrawDurationPolicy
determina cuánto tiempo permanece en pantalla una forma de depuración. Hay tres valores posibles.
-
SingleFrame
: la forma permanecerá en pantalla durante la duración de un solo fotograma. Esta política puede ser útil cuando quieras volver a dibujar una forma de forma frecuente. -
FiniteDuration
: esta política se utiliza con el parámetroDuration
para mostrar una forma durante un determinado número de segundos. -
Persistent
: con la políticaPersistent
, la forma permanecerá en pantalla hasta que sea ocultada o borrada por otro código.
Parámetro Duration
Este parámetro se utiliza con la política FiniteDuration
para mostrar una forma durante un determinado número de segundos. A continuación se muestra un ejemplo de código que dibuja una esfera que se muestra durante 30 segundos.
DebugDraw.DrawSphere(vector3{}, ?DrawDurationPolicy := debug_draw_duration_policy.FiniteDuration, ?Duration := 30.0)
Parámetro Thickness
Este parámetro establece el grosor de las líneas que componen cada forma de depuración. En el caso de DrawPoint()
, establece el grosor del punto único.
Canales
Puedes utilizar canales para agrupar formas relacionadas, y luego ocultar, mostrar o borrar todas las formas de un canal a la vez.
Para crear un canal, utiliza el parámetro Channel
al declarar una instancia de debug_draw
.
DebugDraw:debug_draw = debug_draw{Channel := debug_draw_defaults}
Ahora cualquier forma que dibujes utilizando la instancia DebugDraw
puede ocultarse, mostrarse o borrarse con un solo método. Por ejemplo, si dibujas un punto, una esfera y una flecha con la instancia DebugDraw
, puedes ocultarlos durante un tiempo, volver a mostrarlos y, por último, borrarlos cuando ya no sean necesarios.
# Punto
DebugDraw.DrawPoint(vector3{Z := 200.0}, ?Thickness:= 50.0, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Esfera
DebugDraw.DrawSphere(vector3{Z := 200.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Flecha
DebugDraw.DrawArrow(vector3{Z := 200.0}, vector3{Z := 400.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
Sleep(5.0)
DebugDraw.HideChannel()
Sleep(5.0)
DebugDraw.ShowChannel()
Sleep(5.0)
DebugDraw.ClearChannel()
Valores predeterminados de los parámetros
Parámetro | Valor |
---|---|
?Color:color | NamedColors.Yellow |
?DrawDurationPolicy:debug_draw_duration_policy | debug_draw_duration_policy.FiniteDuration |
?Duration:float | 5.0 |
?Thickness:float | 0.0 |
?Radius:float | 10.0 |
Ejemplos
Cómo visualizar el alcance de un dispositivo Reproductor de sonido
El dispositivo Reproductor de sonido tiene una configuración para visualizar su atenuación. Pero solo puedes ver esta visualización durante el modo de edición. Sigue estos pasos para aprender a recrear los elementos visuales de atenuación en una sesión de juego.
-
Arrastra un dispositivo Reproductor de sonido a tu nivel. En el panel de detalles, asegúrate de que Habilitar efectos visuales de atenuación está marcado. Esto te ayudará a verificar que estás recreando los elementos visuales correctamente con las formas de depuración.
-
En tu archivo de Verse, crea una nueva instancia de
debug_draw
llamadaDebugDrawAudio
. Dale un canal con el nombredebug_draw_audio
.DebugDrawAudio:debug_draw = debug_draw{Channel := debug_draw_audio}
-
Añade dos constantes
@editable
de tipofloat
. LlámalasDebugAttenuationMinDistance
yDebugAttenuationFalloffDistance
. Estos serán los dos radios de las esferas dibujadas para visualizar la atenuación del dispositivo Reproductor de sonido.@editable DebugAttenuationMinDistance:float = 100.0 @editable DebugAttenuationFalloffDistance:float = 100.0
-
Añade otro
@editable
para representar el dispositivo Reproductor de sonido. LlámaloAudioPlayerDevice
.@editable AudioPlayerDevice:audio_player_device = audio_player_device{}
-
Declara una función llamada
DrawAudioDeviceRange()
y dale dos parámetros de tipofloat
:AttenuationMinDistance
yAttenuationFalloffDistance
.DrawAudioDeviceRange(AttenuationMinDistance:float, AttenuationFalloffDistance:float):void =
-
En la nueva función, obtén el objeto Transform del dispositivo Reproductor de sonido.
AudioPlayerDeviceTransform:= AudioPlayerDevice.GetTransform()
-
Mediante la función
DrawSphere
de la API de Dibujado de depuración, dibuja dos esferas para representar la distancia mínima de atenuación y la distancia de reducción de atenuación. El elementoRadius
de la segunda llamada aDrawSphere
debe ajustarse a la suma deAttenuationMinDistance
yAttenuationFalloffDistance
porque la atenuación solo empieza fuera del radio de la distancia mínima de atenuación.DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent) DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance + AttenuationFalloffDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
-
En la función
OnBegin()
de tu archivo de Verse, llama a la funciónDrawAudioDeviceRange()
.OnBegin<override>()<suspends>:void= DrawAudioDeviceRange(DebugAttenuationMinDistance, DebugAttenuationFalloffDistance)
-
Compila tu código de Verse. En el panel de detalles de tu dispositivo de Verse, asegúrate de establecer los valores de DebugAttenuationMinDistance y DebugAttenuationFalloffDistance. Estos valores deben ser equivalentes a los valores Distancia mínima de atenuación y Distancia de reducción de atenuación de tu dispositivo Reproductor de sonido multiplicados por 100.
El dispositivo Reproductor de sonido utiliza metros para la distancia mínima de atenuación y la distancia de caída de atenuación. Como la API de Dibujado de depuración utiliza centímetros, debes convertir los valores.
-
Secuencia de comandos completa
using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Fortnite.com/Playspaces } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/SpatialMath } debug_audio_device := class(creative_device): @editable AudioPlayerDevice:audio_player_device = audio_player_device{} @editable DebugAttenuationMinDistance:float = 100.0 @editable DebugAttenuationFalloffDistance:float = 100.0 DebugDrawAudio:debug_draw = debug_draw{Channel := debug_draw_audio} OnBegin<override>()<suspends>:void= DrawAudioDeviceRange(DebugAttenuationMinDistance, DebugAttenuationFalloffDistance) DrawAudioDeviceRange(AttenuationMinDistance:float, AttenuationFalloffDistance:float):void = AudioPlayerDeviceTransform:= AudioPlayerDevice.GetTransform() DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent) DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance + AttenuationFalloffDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)