La consola en profundidad - Guía del usuario de Lumberyard

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

La consola en profundidad

Open 3D Engine (O3DE), el sucesor de Lumberyard, ya está disponible en Developer Preview. Descargar O3DEo visite elBlog de AWS Game Techpara obtener más información.

La consola es un sistema de interfaz de usuario que controla los comandos y las variables de la consola. También genera mensajes de registro y almacena el historial de entrada y salida.

Codificación de colores

La consola de juego es compatible con la codificación de color mediante los índices de color 0..9 con un carácter $ inicial. El código está oculto en el texto de salida en la consola. Se pueden usar mensajes de registro sencillos a través de la interfaz ILog para enviar texto a la consola.

This is normal $1one$2two$3three and so on

En el ejemplo anterior, uno se representa en color rojo, dos en verde y tres (y el texto restante) en azul.

Variables de la consola

Las variables de consola proporcionan una forma cómoda de exponer variables que el usuario puede modificar fácilmente mediante la inclusión en la consola durante el tiempo de ejecución o pasándolas como argumento de línea de comando antes de lanzar la aplicación.

Para obtener más información sobre cómo usar argumentos de línea de comandos, consulte el artículo sobre argumentos de línea de comandos.

En el código, las variables de consola se conocen como CVar.

Registro de nuevas variables de consola

Para una variable de consola de base flotante o de número entero, se recomienda utilizar la función IConsole::Register() para exponer una variable de C++ como una variable de consola.

Para declarar una nueva variable de consola de cadena, utilice la función IConsole::RegisterString().

Acceso a las variables de consola desde C++

Las variables de consola se exponen mediante la interfaz ICVar. Para recuperar esta interfaz, utilice la función IConsole::GetCVar().

La manera más eficiente de leer el valor de la variable de consola es accediendo directamente a la variable de C++ enlazada al proxy de la variable de la consola.

Agregar nuevos comandos de consola

La consola se puede ampliar con facilidad con nuevos comandos. Un nuevo comando de consola se pueden implementar en C++ como una función estática que sigue el tipo ConsoleCommandFunc. Los argumentos de este comando de consola se pasan mediante la interfaz IConsoleCmdArgs.

En el código siguiente se muestra la implementación básica de un comando de consola:

static void RequestLoadMod(IConsoleCmdArgs* pCmdArgs); void RequestLoadMod(IConsoleCmdArgs* pCmdArgs) { if (pCmdArgs->GetArgCount() == 2) { const char* pName = pCmdArgs->GetArg(1); // ... } else { CryLog("Error, correct syntax is: g_loadMod modname"); } }

En el siguiente código se registra el comando con el sistema de la consola:

IConsole* pConsole = gEnv->pSystem->GetIConsole(); pConsole->AddCommand("g_loadMod", RequestLoadMod);

Grupos de variables de consola

Los grupos de variables de consola proporcionan un modo cómodo de aplicar valores de configuración predefinidos a varias variables de consola a la vez.

En el código, las variables de consola se conocen como CVarGroup. Las variables de consola pueden modificar otros grupos de variables de consola para crear jerarquías mayores.

aviso

Los ciclos en las asignaciones no se detectan y esto puede producir bloqueos.

Registro de un nuevo grupo de variables

Para registrar un nuevo grupo de variables, añada un nuevo archivo de texto .cfg al directorio GameSDK\config\CVarGroups.

sys_spec_Particles.cfg

[default] ; default of this CVarGroup = 4 e_particles_lod=1 e_particles_max_emitter_draw_screen=64 [1] e_particles_lod=0.75 e_particles_max_emitter_draw_screen=1 [2] e_particles_max_emitter_draw_screen=4 [3] e_particles_max_emitter_draw_screen=16

Esto crea un nuevo grupo de variables de consola llamado sys_spec_Particles que se comporta como una variable de consola de número entero. De forma predeterminada, esta variable tiene el estado 4 (establecido en la línea que sigue al comentario en el ejemplo).

Al cambiar la variable, se aplica el nuevo estado. Las variables de consola que no se especifican en el archivo .cfg no se establecen. Todas las variables de consola tienen que formar parte de la sección predeterminada. Se reproduce un mensaje de error si se incumple esta regla.

Si no se especifica una variable de consola en una sección personalizada, se aplicará el valor especificado en la sección predeterminada.

Documentación de grupo de variables de consola

La documentación del grupo de variables de consola se generan automáticamente.

sys_spec_Particles

Console variable group to apply settings to multiple variables sys_spec_Particles [1/2/3/4/x]: ... e_particles_lod = 0.75/1/1/1/1 ... e_particles_max_screen_fill = 16/32/64/128/128 ... e_particles_object_collisions = 0/1/1/1/1 ... e_particles_quality = 1/2/3/4/4 ... e_water_ocean_soft_particles = 0/1/1/1/1 ... r_UseSoftParticles = 0/1/1/1/1

Comprobar si el valor de un grupo de variable de consola representa el estado de las variables que controla

En la consola

En la consola puede escribir el nombre del grupo de variables de la consola y presionar el tabulador. Si el valor de la variable no está representado, se imprimirá el valor de RealState.

sys_spec_Particles=2 [REQUIRE_NET_SYNC] RealState=3 sys_spec_Sound=1 [REQUIRE_NET_SYNC] RealState=CUSTOM sys_spec_Texture=1 [REQUIRE_NET_SYNC]

Al llamar al comando de consola sys_RestoreSpec, puede comprobar por qué las variables sys_spec_ no representan los estado correctos.

Desde el código de C++

Desde el código, puede utilizar la función de miembro GetRealIVal() y comparar el valor que devuelve con el resultado de GetIVal() en ICVar.

Ejecución en diferido de los comandos de consola de la línea de comandos

Los comandos que se pasan a través de la línea de comando utilizando el prefijo + se almacenan en una lista independiente, a diferencia del resto de los comandos de la consola.

Esta lista permite a la aplicación distribuir la ejecución de esos comandos entre varios fotogramas en lugar de ejecutar todo a la vez.

Example

Considere el siguiente ejemplo.

--- autotest.cfg -- hud_startPaused = "0" wait_frames 100 screenshot autotestFrames wait_seconds 5.0 screenshot autotestTime -- console -- StarterGameLauncher.exe -devmode +map SinglePlayer +exec autotest +quit

En el ejemplo, se han llevado a cabo las siguientes operaciones:

  • Cargue el mapa de un jugador.

  • Espere 100 fotogramas.

  • Haga una captura de pantalla llamada autotestFrames.

  • Espere 5 segundos.

  • Haga una captura de pantalla llamada autotestTime.

  • Salga de la aplicación.

Details

Se definen dos categorías de comandos: bloqueadores y normales.

Por cada fotograma, la lista de comandos diferidos se procesa como fifo. Los elementos de esta lista se consumen siempre que se presenten comandos normales.

Cuando un bloqueador se consume y ejecuta, el proceso se retrasa hasta el siguiente fotograma. Por ejemplo, los comandos como map y screenshot son bloqueantes.

Un comando de consola (una variable o una comando) se puede etiquetar como bloqueadores durante su declaración con la marca VF_BLOCKFRAME.

Se admiten los comandos de sincronización siguientes.

Título opcional

Comando

Tipo

Descripción

wait_frames num:

<int>

Esperar a que se reproduzcan num fotogramas antes de reanudar la ejecución de la lista.

wait_seconds sec:

<float>

Esperar el número de segundos sec antes de reanudar la ejecución de la lista.