¿Cuándo usaría "guiones" o "guiones" en un juego, en lugar del lenguaje principal?

13

Los términos scripts y scripting parecen usarse indistintamente en el intercambio de desarrollo de juegos, pero aparte de leer preguntas sobre la elección del lenguaje de scripting, no entiendo la relación entre scripts y scripting, y el lenguaje central. ¿Qué hace típicamente un guión, cuándo se usaría y son los guiones en algunos contextos (según lo definido por los programadores de juegos) diferentes a un lenguaje de guiones?

Tétrada
fuente
@Tetrad Gracias por el enlace, pero creo que la otra pregunta discute más sobre la cuestión fundamental de la arquitectura de "por qué", en lugar de para qué y cuándo.
2
"qué" y "cuándo" serán específicos para sus casos de uso. El "por qué" te da habilidades para tomar decisiones. Sin detalles, esta pregunta es un engaño (en mis ojos).
Tetrad

Respuestas:

15

Las secuencias de comandos se escriben para un lenguaje de secuencias de comandos. La gente puede usar las palabras en oraciones de argot para obtener la confusión a la que se refiere, pero pídale a cualquier persona las definiciones de Script, Scripting y Scripting Language y obtendrá algo como: Scripting es el acto de escribir Scripts usando un lenguaje de scripting.

Cuando incrusta un lenguaje de secuencias de comandos en un motor de juego, o el lenguaje central al que se refiere, está exponiendo no solo los objetos dentro del motor del juego sino también permitiendo que se escriba la lógica para el motor del juego. Otra cosa a tener en cuenta es que esto convierte su juego en una especie de máquina virtual, ya que los lenguajes de secuencias de comandos rara vez se compilan en lenguaje de máquina y, en cambio, su motor de juegos los interpreta en una forma de código de bytes e interpreta en tiempo de ejecución.

Esto tiene grandes beneficios para el equipo de desarrollo, algunos de los cuales puede encontrar a continuación:

  • Los lenguajes de secuencias de comandos generalmente se administran en memoria, por lo que no tiene que preocuparse por las asignaciones
  • Por lo general, son un lenguaje de tipo suelto que elimina la necesidad de asegurarse de que está utilizando el tipo de variable para lo que está haciendo, simplemente haga una variable y vaya con ella.
  • Los lenguajes en sí mismos son a menudo muy simplistas y ofrecen bastante control a las personas que no son programadores.
  • La alteración de los scripts no requiere que se vuelva a compilar el motor central.
  • Scripting vs Coding a menudo reduce el tiempo requerido para un ajuste muy iterativo de la lógica del juego.
  • Dependiendo del diseño y el lenguaje, a menudo puedes volver a cargar un script mientras el juego se está ejecutando para un ajuste / prueba aún más fácil.

Estoy seguro de que la lista puede seguir y seguir, estoy seguro, especialmente cuando entras en tipos de juegos especializados y cómo las secuencias de comandos pueden ayudar a definir las reglas de formación de grupos para mover grupos de unidades en un RTS o cómo puedes crear una lógica de UI en un lenguaje de script para proporcionar una IU extensible a sus usuarios finales y similares.

James
fuente
9

El uso de secuencias de comandos tiene muchas ventajas sobre el "lenguaje central". Algunos de estos incluyen:

  • Traslado (más) del contenido de los desarrolladores principales a los artistas, liberando a los desarrolladores principales a las tareas del motor de las tareas de juego
  • Los guiones tienden a estar aislados, no pueden hacer nada realmente peligroso
  • Modificar scripts no requiere recompilar y volver a ejecutar el juego.
Jari Komppa
fuente
Para su primer punto de viñeta, ¿puede proporcionar un ejemplo de una pieza de funcionalidad que se movería a un guión para que los artistas la editen?
Los ejemplos de @Brian Reindel serían estadísticas de armas / NPC, IA y mapas / niveles.
Hackworth
1
@Hackworth ¿Estás diciendo que la programación de IA es realizada por artistas? Las secuencias de comandos que realizaría un artista incluirían secuencias de comandos para animaciones y renderizar objetos 3D y demás.
KRB
3
No se debe hacer que los artistas programen nada. Separas el motor de la lógica del juego por el bien de la modularidad , no por el desarrollo de la descarga a personas cuyas fortalezas están en otra parte.
Jon Purdy
1
@James bueno, el punto es: hacen programación "ligera", pero están en el campo de "contenido". Entonces la terminología es complicada. =)
Jari Komppa
6

Un script generalmente es una pieza de código que se ejecuta fuera de su motor central. Por lo general, está contenido en archivos de texto donde desee guardarlos. Luego, el motor lo carga, analiza y ejecuta en tiempo de ejecución.

Lo que generalmente sucede es que, sea cual sea el lenguaje que use (Lua, Angelscript, por ejemplo), este lenguaje generalmente tiene algunas facilidades que permiten al programador del motor exponer las funciones del motor o incluso clases completas a la instancia del "motor de secuencias de comandos" que se está ejecutando actualmente .

Por ejemplo (ejemplo totalmente estúpido, pero solo para entender) su código de juego podría tener una función pública que genere zombis en algún lugar:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

El lenguaje de secuencias de comandos que utiliza ahora le permite exponer esta función al analizador de secuencias de comandos que se está ejecutando. Esto significa que puede abrir un archivo de texto, escribir "SpawnZombie (200,300,1337)" y una vez que su motor ejecute el código, aparecerá un Zombie en esa ubicación.

Las otras respuestas ya enumeran un par de buenos ejemplos de cómo se usa típicamente, pero omiten un punto que encuentro muy importante:

Este tipo de scripts hace que sea muy fácil depurar o probar el juego durante el tiempo de ejecución.

Digamos que quieres descubrir la manera perfecta de colocar un zombie en el mapa para que tenga el máximo efecto de miedo en el jugador una vez que lo descubre. Sin soporte de secuencias de comandos, tendría que salir de la aplicación, cambiar algunos números mágicos en el código, volver a compilar y probarlo.

Con el soporte de secuencias de comandos (siempre que tenga algún método para ingresar texto durante el tiempo de ejecución, por ejemplo, una consola de depuración), simplemente escriba "SpawnZombie (333,444,555)" y vea cómo se ve.

De la misma manera, es posible que puedas generar armas, vehículos, cargar diferentes mapas, cambiar los valores de algunas cosas en el juego, etc., matar enemigos porque no quieres perder el tiempo llegando a la parte que necesita ser probado etc.

Esto te ahorrará toneladas de veces en juegos más complejos.

TravisG
fuente
2

1) Las secuencias de comandos suelen ser mucho más fáciles de modificar que el código.

2) Las secuencias de comandos a menudo se pueden modificar en el campo. Esto permite modificar el juego.

Loren Pechtel
fuente
Entonces, ¿sería justo decir que sus scripts están construidos con idiomas que no están compilados para que cualquiera pueda editarlos?
@Brian Reindel: En general, sí.
Loren Pechtel
2

La mayoría de los lenguajes de script son mucho más expresivos que el lenguaje en el motor central. A menudo, el motor está escrito en un lenguaje de nivel relativamente bajo (por ejemplo, C ++) por razones de rendimiento, pero el código de juego no necesita ser tan eficiente y, por lo tanto, las prioridades cambian para poder expresar la funcionalidad fácilmente.

Por ejemplo, escritura dinámica vs. estática. Otro ejemplo: recolección de basura versus administración manual de memoria.

jhocking
fuente
0

Las secuencias de comandos le permiten escribir lógica en un nivel superior. En otras palabras, escribe menos código con más funcionalidad.

Entonces, un ejemplo, lo siguiente muestra la diferencia entre escribir algo en código y escribirlo en un lenguaje de script.

Código de juego

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Código de script

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

¿Ves cuánto menos codificación tiene que hacer el diseñador si usas un lenguaje de script?

La razón es que en el código del juego, tienes que dividir un evento en múltiples cuadros y escribir el código desde una perspectiva de múltiples cuadros. Por otro lado, las secuencias de comandos le permiten pensar en el evento de múltiples cuadros como una sola línea de código, porque todos los códigos adicionales se abstraen detrás de una función de secuencia de comandos.

Puedes preguntar, pero ¿no puede esa función simplemente escribirse en el código del juego también? Bueno, sí, pero eso significa que los diseñadores tendrán que abrir el código fuente del motor del juego y escribir todos los códigos allí, y no querrás que tus diseñadores revisen el código fuente del motor del juego (podrían cambiar accidentalmente algún otro código y todo se cuelga).

En cambio, desea que su diseñador haga algo como esto en su lugar: haga clic con el botón derecho en un automóvil en el Editor de mapas, haga clic en Insertar secuencia de comandos, escriba los códigos de secuencia de comandos. No hay problema con los códigos fuente críticos del motor del juego.

Desarrollador
fuente