Más tutoriales de Otros
Valoración: 7
Guía de UnrealScript para principiantes

Objetivo

En este tutorial voy a tratar de hacer una introducción a la programación con el motor Unreal usando el lenguaje de scripting UnrealScript y voy a intentar mostrar una visión general de la estructura básica de clases que usa Unreal


Este tutorial está pensado para todos aquellos que están buscando un punto de partida para empezar a crear mods para el Unreal. También recomiendo encarecidamente leer la "Introducción a UnrealScript" de Tim Sweeney ya que esta introducción está más enfocada a la aplicación práctica del UnrealScript al Unreal y su introducción es más genérica.

Esta introducción no abarca el uso de archivos de cabecera ni otras librerías ya que no están disponibles actualmente para el público en general. Para enviarme comentarios, sugerencias y dudas podéis contactar conmigo a través de ca@planetunreal.com. Gracias a Tim Sweeney, Steven Polge, y el resto del equipo de Epic por hacer un juego tan bueno y a los desarrolladores de Epic por ser tan buenos programadores y responder a preguntas. Sois la leche :-).


Introducción

UnrealScript es un lenguaje pensado exclusivamente para desarrollar contenido para juegos que usen el motor Unreal. Está basado en Java y C++, así que si tienes alguna experiencia en cualquiera de los dos lenguajes o tan solo en C, la curva de aprendizaje será relativamente pequeña, pero si no tienes ninguna experiencia anterior te recomiendo encarecidamente que primero aprendas alguno de esos lenguajes y luego vuelvas al UnrealScript. UnrealScript se adhiere a un estilo de sintaxis común tanto a Java como a C++/C, y comparte con Java bastantes palabras reservadas.

UnrealScript es un lenguaje de programación orientado a objetos (OOP - Object Oriented Programming) lo que significa que está basado en los conceptos de clases y herencias. Es importante hacer notar que UnrealScript no tiene todas las características de un lenguaje de programación más completo como pueda ser Java; principalmente no soporta conceptos como herencias múltiples pero, afortunadamente, ninguna de estas características son necesarias para hacer una modificación completa. Hay muchos tutoriales sobre OOP que te facilitarán la familiarización con este concepto de programar (prueba en Google).

Una características única de UnrealScript que no se puede encontrar ni en Java ni en C++ son los States (estados). Los estados son una característica que te permite definir diferentes implementaciones de funciones dentro de la misma clase (muy parecido a la sobrecarga de funciones en OOP), y generalmente son usadas para programación basada en el tiempo. Por ejemplo, imagina que tienes una clase Player con 3 estados: Walking, Running e Idle. Imagina que quieres que Player dé un salto en el aire si salta mientras está corriendo (Running), y que no quieres que salte mientras está quieto (Idle). Una forma de hacer esto usando estados es definir la función de salto en los estados Running e Idle, y entonces, en el código de estado Running programas que haga un salto, y en la función de salto del código de estado Idle programas que esté quieto. Entonces ahora, cuando el jugador esté corriendo (y por lo tanto, en el estado Running) dará un salto si le da a saltar y no saltará si está quieto. Lo siento si no es un buen ejemplo, pero debería ayudar para ver mejor cómo los estados pueden llegar a ser muy útiles.

Unreal guarda el código UnrealScript en paquetes o packages (opcionalmente junto con texturas, sonidos y modelos) en el directorio UnrealSystem o UnrealTournamentSystem. Para mantener todas tus nuevas clases en un único paquete para que sea más fácil distribuir sólo tienes que especificar el mismo nombre de paquete en el campo Package cuando crees nuevas subclases dentro de Unrealed.


Usando Unrealed para programar en UnrealScript

Dependiendo de la versión del editor que estés usando el navegador de clases del editor podría estar en la parte derecha de la pantalla o accesible via un icono de peón en la parte superior.

Para compilar y guardar los cambios pulsa F7 y luego, al final del árbol elige guardar, busca tu paquete (package) y haz click en Guardar. Unrealed guardará entonces los cambios (compilados o no) en un archivo en el directorio UnrealSystem o UnrealTournamentSystem con el nombre del packagename y la extensión .u (ejemplo: blah.u para el paquete blah.


Estructura de clases de Unreal
Object y Actor

Todo lo que se programa en UnrealScript está derivado desde una clase muy abstracta y básica llamada Object, y desde ahí tenemos muchas clases internas que se relacionan con el motor en sí mismo (principalmente sonidos, gráficos, etc) y mucho más importante, la clase Actor que contiene todo lo que podrías querer modificar para modificaciones parciales. La clase Actor define la mayoría de las variables estándares y funciones que son necesarias para todas las clases y todo el material del juego relacionado con el contenido está contenido en clases derivadas de Actor. Jugadores, armas, inteligencia artificial e incluso el juego en sí mismo está derivado de la clase base Actor. Funciones importantes a recordar en la clase Actor son BeginPlay(), Spawn(), Touch(), Tick() y Destroy().

La función BeginPlay() se llama cada vez que una instancia de esta clase se pone en funcionamiento dentro del juego. Es muy útil inicializar variables importantes y hacer otras acciones en el momento de la creación de la instancia.

La función Spawn() se usa para crear una instancia de una clase y ponerla en juego.

La función Touch() se llama cada vez que un actor se toca con otro actor y es muy útil para causar daño o alterar variables de otro actor.

La función Tick() se llama en cada gametick (instante en el juego), generalmente el mayor número de veces posible, así que la puedes usar para realizar acciones de forma contínua o para chequear ciertas condiciones. NOTA: Ten cuidado de no poner demasiado código en una función Tick() ya que es muy fácil sobrecargar (y ralentizar) el juego y provocar un retardo destacable si hay demasiadas cosas ocurriendo a la vez.

La función Destroy() destruye esta instancia de la clase cuando no quieres que siga en juego.


Pawns

La clase Pawn contiene las clases ScriptedPawn (IA), FlockPawn (IA de insectos y enjambres), PlayerPawn (jugadores) y las clases Bot (relativas a los bots, como es lógico). Básicamente contiene todas las "entidades vivas" de un mapa. La clase Pawn define variables básicas, funciones de movimiento y otras funciones comunes a todos los Pawns. Algunas de las variables que se pueden encontrar en todos los pawns son: Health (Vida), Groundspeed/Airspeed (velocidad en tierra / velocidad en vuelo) y JumpZ (saltos).

PlayerPawn comprende todos los jugadores, es decir, clientes, que están disponibles en el juego. Tiene varias clases hijas, principalmente UnrealIPlayer, Human/Skaarj, y otros jugadores male/female (varón/mujer).

PlayerPawn tiene toda la funcionalidad de los jugadores (movimiento, gestión de entrada -ratón, teclado-) mientras que el resto de las clases hijas contienen las animaciones y los sonidos específicos a los diferentes jugadores.

Playerinput() y PlayerCalcView() son 2 funciones que pueden ser alteradas en tus propias clases para crear efectos muy impresionantes en tus modificaciones. Playerinput() gestiona toda la información de entrada del jugador, llama a las funciones pertinentes y modifica los datos apropiados. PlayerCalvView() gestiona los cálculos del área de visión del jugador y puede ser fácilmente modificado para crear una vista en tercera persona, etc.

En la clase ScriptedPawn encontrarás todo el contenido del juego relativo a IA (la única excepción los FlockPawns). Esta clase define el marco de trabajo necesario para todas las criaturas que puedas encontrar en el juego. La IA usa los estados intensivamente y está basada en la técnica de navegación conocida como pathnoding (nodos de paso). Gracias a dios, Steven Polge es un muy buen programador y ha diseñado una IA muy robusta que puede ser usada para crear nuevas criaturas muy fácilmente sin añadir casi nuevo código, usando variables editables para definir todos los aspectos de la IA. Os recomiendo encarecidamente que leáis el artículo "Unreal Creature Care and Feeding Guide" si queréis hacer modificaciones mayores de la IA o si tan sólo queréis tener un conocimiento más profundo de cómo funciona por dentro la IA.

FlockPawns es un caso especial de IA que da vida a esos maravillosos enjambres de moscas y bancos de peces que no hacen mucho más que resultar agradables de ver. Puedes modificarlos para hacerles un poco más inteligentes si quisieras supongo, pero ya hacen bastante para no ser más que insectos. NOTA: FlockMasterPawns gestiona actualmente la creación de FlockPawns, y deberías trabajar con aquellos en lugar de FlockPawns individuales ya que éstos están programados para autodestruirse si no tienen asociado un FlockMasterPawn.

La clase Bot cuelga directamente de ScriptedPawns ya que sus funciones y objetivos son bastante diferentes del resto de IAs del juego. Si quieres estudiar una clase porque tienes ideas de Bots más realísticos/habilidosos/únicos deberías estudiar la clase Bot. NOTA: los bots todavía mantienen la misma estructura inicial que ScriptedPawns así que la guía de Steven Polge es también válida para entender los bots.


Info

La clase Info es una clase generalizada que comprende todas las clases relacionadas con la información relativa al juego, como las reglas actuales (Deatchmatch vs SinglePlayer vs TeamGame), ZoneInfo que es una clase usada para crear lava, agua o tan solo espacio vacío y PlayerReplicationInfo que contiene información de red especial para los Players. La mayor parte de mi experiencia en programación en la clases Info ha estado relacionada con GameInfo para definir nuevos tipos de juego y variaciones de los clásicos, como Deathmach sólo con ASMD. También es posible crear subclases que dependan de ZoneInfo para crear nuevos tipos de zonas como gases tóxicos de Marte o quizás un caso especializado de agua que refleje los disparos de armas, etc.


Triggers

La clase Trigger gestiona la operación de ascensores, puertas y otros eventos respondiendo a ciertas acciones del juego y llevando a cabo otras acciones, ya sea modificando otros actores, desactivando otros triggers o ambos. Los Triggers son invisibles dentro del juego y generalmente son activados por el contacto, la proximidad o por otro trigger. También se puede llamar a la función Trigger() de otra clase para activar ciertos triggers, por ejemplo, para abrir todas las puertas de un nivel a la vez o algo similar. Se pueden crear subclases de Triggers según creas conveniente.


Effects

La clase Effects cubre todos los efectos especiales de Unreal como las explosivones, los efectos de las armas, etc. Crea subclases de Effects para crear nuevos efectos o para combinar unos ya existentes.


Inventory

La clase Inventory contiene las clases Pickup (Items) y Weapon (Armas). Pickup se refiere a todos los items diferentes de armas que un Pawn puede recoger y usar en el juego, ya sea vida, armadura o munición. Puedes usar la clase Pickup para crear tus propios items únicos en una modificación, como por ejemplo una mina antipersonal. La clase Weapon controla todas las funciones relacionadas con el disparo y la adquisición de armas en una partida. Todas las armas individuales están definidas como subclases de la clase Weapons y controlan las características específicas de las armas, como las animaciones y la creación de efectos de proyectiles y armas. Crea una subclase de Weapons para nuevas armas (suponiendo que ya tengas el modelo y las animaciones) o puedes hacer una subclase de un arma ya existente para usar su modelo. NOTA: Weapons tiene una variable muy importante, bInstantHit. Si esta variable está en Verdadero el arma no creará un proyectil (como un cohete en el caso del lanzacohetes), y en su lugar hará un daño instantáneo a cualquier objetivo que esté en su línea de impacto (como el rifle de francotirador).


El resto

Hay muchas clases que se usan para crear el resto de cosas que ves en Unreal como el HUD para los jugadores, luces, brushes en movimiento, menus o nuevos proyectiles. La experimentación y la simple navegación a través del código te debería ayudar a tener un conocimiento básico de cómo funciona el resto y cómo funciona.


Vectores y Ángulos

Unreal usa el concepto de Vectores y Ángulos para controlar el movimiento y la rotación de los Actores en el universo 3D. un vector es una estructura que contiene 3 componentes: los valores X, Y y Z, donde X es el eje delante/atrás, Y es derecha/izqda y Z es arriba/abajo. Puedes modificar estos valores directamente para alterar la posición de un Actor en el universo usando la función SetLocation() con un nuevo vector para la nueva localización.

La rotación está gestionada por la estructura Angle (Ángulo) que también contiene 3 componentes: Pitch, Yaw y Roll, donde Pitch rota arriba/abajo, Yaw derecha/izqda y Roll hará rodar la cámara como si estuvieras haciendo rodar tu cabeza de derecha a izquierda. Con la función SetRotation() puedes alterar la dirección en la que se encuentra un Actor o convertir la rotación en un vector para alterar la dirección de la velocidad de un Actor, etc.

Si estás en el colegio/universidad y quieres saber más acerca de matemáticas 3d te sugeriría que asistieras a clases de Física y Álgebra Lineal ya que los vectores y matrices son un tema común. También puedes buscar online para tutoriales de matemáticas 3d, sé que QDevels tiene un tutorial 3d así como Weapons of Destruction.

Importante: Este tutorial ha sido traducido por dharana a partir del original publicado en UnrealScript.com.

14 May 2002, 19:35
#1

Estos tutoriales son de Tesis. Tremendamente útiles y aptos para todos los públicos.

14 May 2002, 23:06
#2

dharana roolzz

ya podre hacer una arma pal ut ke tanto desee jejej i poner de nuebas en mis mpas

por cierto lo cierto es cierto

18 May 2002, 14:28
#3

bueno dharana, dentro de poco daras informacion como pa modificar el cshp y endosarnos unos aimbots >:), cosa ke sabiendo un poco de uscript no es dificil

24 May 2002, 05:09
#4

Gracias dharana, por haberte molestao en hacer llegar algo de info sobre UScript a las q no tenemos ni zorra de ingles.

24 May 2002, 09:51
#5

Si hay gente interesada puedo traducir más tutoriales, no me cuesta mucho y me gusta traducir

24 May 2002, 16:14
#6

por traducir que no quede ande hay tutoriales por traducir

12 Sep 2002, 21:34
#7

Ya lo creo que se agradece la traduccion. Pero, por degracia, sera un tutorial injustamente desperdiciado, me equivoco? (creo que no)  

La ausencia de comentarios delatan la escasez de interes por el tema. Me refiero a este pais claro.

11 Sep 2003, 12:21
#8

Joder!!! esta bien, lastiam de no haber conocido esta pagina antes, me hubiese venido bien para entender el Uscript, cuando me pues a hacer mi mutador, que es una nueva arma para el UT, es el Rilfe de plasma del DOOM !!!!

Funciona y incluso le tengo puesto el mesh y texturas de la arma para cojer y de la municion, pero tengo dos problemas con ello. 1 - No puedo hacer q la municion maxima sea 800 (chupa municion por un tubo)   2 - Tengo problemas para hacer un mesh decente para cuando se ve en 1 persona (utilizo el 3d max y he hecho varias versiones con las animaciones y todo, pero es penoso)

14 Dec 2003, 19:57
#9

ta wais dharana

Regístrate para poder comentar.

Si ya estás registrado solo tienes que iniciar sesión.

 
Juegos
Plataformas
Los + visitados