Para ayudar a depurar tu juego, puedes mostrar ciertos datos del juego con fines de prueba mientras ocultas esa información al jugador. Una forma de hacerlo es mediante el inicio de sesión, pero puedes mostrar algunos datos del juego de una forma más visual con la API de Dibujo de depuración.
Con la API de Dibujo de depuración, puedes dibujar formas básicas y establecer su ubicación, tamaño, color y el tiempo que aparecerán en pantalla. Por ejemplo, es posible que desees 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, incluso si ese volumen es invisible en tu juego. Esto puede ayudar a determinar la ubicación de los volúmenes con determinados efectos.
La forma de 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 ubicación perfecta para los guardias.
Cómo habilitar Dibujo 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 Depurar, luego en Dibujo de depuración de Verse para activar las funciones de Depuración y Dibujo de depuración de Verse.
La opción Dibujo de depuración de Verse solo estará activa durante una sesión de juego de UEFN. Se habilita por usuario, lo cual significa que solo verán las formas de depuración aquellas personas que activaron Depuración y Dibujo de depuración de Verse. Las formas de depuración no aparecerán en el visor de UEFN o en una isla publicada, incluso si esta opción está marcada en Configuración de la isla.
Dibuja tu primera forma de depuración
Para dibujar la primera forma con la API de Dibujo de depuración, sigue estos pasos.
-
Agrega esta expresión de importación al archivo de Verse.
using { /UnrealEngine.com/Temporary/Diagnostics }
-
Crea un canal mediante la declaración de una subclase que se herede del tipo
debug_draw_channel
. Los canales sirven para agrupar formas relacionadas. Son opcionales, pero es una buena práctica utilizarlos. Existen funciones en la API de Dibujo de depuración que puedes utilizar para mostrar, ocultar o borrar muchas formas a la vez, pero mostrar y ocultar solo funciona a nivel de canal.my_debug_draw := class(debug_draw_channel) {}
-
Declara una nueva constante del tipo
debug_draw
. Este será el objeto que uses para llamar a los métodos a fin de dibujar formas. Mediante este ejemplo se muestra el uso del parámetro Canal (creado en el paso anterior), pero es opcional.DebugDraw:debug_draw = debug_draw{Channel := my_debug_draw}
-
Llama al método
DrawSphere
. En este ejemplo, se usan dos parámetros.
-
Center:= vector3{Z:= 150.0}
: Se trata de un parámetro obligatorio de tipo vector3 que determina la ubicación del centro de la esfera. En este ejemplo, utilizarás el constructor del tipovector3
para crear un valor literal. Esto establecerá 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, así que establécelo en la política Persistente. Esto significa que la esfera permanecerá visible en la isla hasta que otro código la oculte o la borre.DebugDraw.DrawSphere(Center := vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Después de construir tu código Verse e iniciar una sesión, deberías ver aparecer una esfera en la ubicación establecida por el parámetro Center
.
Formas
Con la API de Dibujo de depuración, puedes dibujar varias formas que aparecen como simples cuadros de conector en una sesión de UEFN en ejecución. Cada forma es útil en distintas situaciones. En las siguientes secciones, se explicarán los métodos para dibujar cada forma y los parámetros que son exclusivos de cada método. En las siguientes secciones, se explicarán los parámetro que son exclusivos de cada método. Cada ejemplo de código de esta sección asume que ya agregaste el código de Dibuja tu primera forma de depuración a 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, el ancho y la profundidad de la caja |
Cápsula
Usa 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
Usa 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
Usa 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 el ancho del cono en la dirección X |
?AngleHeightRadians:float | Establece el ancho del cono en la dirección Y |
Para que la parte inferior de tu cono sea un círculo perfecto, AngleWidthRadians
y AngleHeightRadians
deben ser iguales.
Cilindro
Usa 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 el otro |
?Radius:float | Establece el radio de los dos círculos que forman cada extremo del cilindro |
Línea
Usa 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
Usa 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 punta de la flecha |
?ArrowSize:float | Establece la longitud de las dos líneas que forman la punta de la flecha |
Punto
Usa 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
en 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 mediante los cuales se 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 funciones en Funciones para obtener más información sobre argumentos con nombre y opcionales.
Color
Establece el color de las formas mediante 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 tener la expresión de importación para el módulo Colors
en la parte superior del 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 el tiempo que una forma de depuración permanece en pantalla. Existen tres valores posibles.
-
SingleFrame
: La forma permanecerá en pantalla durante la duración de un solo fotograma. Esta política puede ser útil cuando se desea redibujar frecuentemente una forma. -
FiniteDuration
: Esta política se utiliza con el parámetroDuration
para mostrar una forma durante una determinada cantidad de segundos. -
Persistent
: Con la política Persistente, la forma permanecerá en pantalla hasta que otro código la oculte o la borre.
Duración
El parámetro Duration
se utiliza con la política FiniteDuration
para mostrar una forma durante una determinada cantidad 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)
Grosor
El parámetro Thickness
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 usar 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 con la instancia DebugDraw
puede ocultarse, mostrarse o borrarse con un único 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, finalmente, 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 de parámetros predeterminados
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
Visualiza el alcance de un dispositivo Reproductor de audio
El dispositivo Reproductor de audio 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 la atenuación en una sesión de juego.
-
Arrastra un dispositivo Reproductor de audio a tu nivel. En el panel de detalles, asegúrate de que la opción Habilitar elementos visuales de la atenuación esté seleccionada. 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
debug_draw
llamadaDebugDrawAudio
. Asígnale un canal con el nombredebug_draw_audio
.DebugDrawAudio:debug_draw = debug_draw{Channel := debug_draw_audio}
-
Agrega dos constantes
@editable
de tipofloat
. Asígnales los nombresDebugAttenuationMinDistance
yDebugAttenuationFalloffDistance
. Estas constantes serán los dos radios de las esferas dibujadas para visualizar la atenuación del dispositivo Reproductor de audio.@editable DebugAttenuationMinDistance:float = 100.0 @editable DebugAttenuationFalloffDistance:float = 100.0
-
Agrega otra constante
@editable
para representar el dispositivo Reproductor de audio. NómbralaAudioPlayerDevice
.@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 Transformar del dispositivo Reproductor de audio.
AudioPlayerDeviceTransform:= AudioPlayerDevice.GetTransform()
-
Con la función
DrawSphere
de la API de Dibujo de depuración, dibuja dos esferas para representar la distancia de atenuación mínima y la distancia de disminución mínima. El parámetroRadius
en la segunda llamada aDrawSphere
debe ser la suma deAttenuationMinDistance
yAttenuationFalloffDistance
porque la atenuación solo comienza fuera del radio de la distancia de atenuación mínima.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()
del archivo de Verse, llama a la funciónDrawAudioDeviceRange()
.OnBegin<override>()<suspends>:void= DrawAudioDeviceRange(DebugAttenuationMinDistance, DebugAttenuationFalloffDistance)
-
Construye 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 de AttenuationMinDistance y AttenuationFalloffDistance del dispositivo Reproductor de audio multiplicados por 100.
El dispositivo Reproductor de audio utiliza metros para la distancia de atenuación mínima y la distancia de disminución de atenuación. Dado que la API de Dibujo 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)