Introducción a UnrealScript – parte 1

Este es el primer tutorial de una serie de tutoriales relacionados con UnrealScript, el lenguaje de programación del MAGNIFÍCO motor de juegos Unreal Engine 3.

En este primer tutorial (dividido en dos partes) veremos:

  • Cómo instalar y configurar el UnCodeX para poder revisar todas las clases del UDK organizadas jerárquicamente
  • Cómo preparar un nuevo proyecto para comenzar a desarrollar nuestro juego
  • Crearemos las clases necesarias para permitirle al jugador controlar el personaje del juego mediante el teclado y el mouse.
  • Configuraremos las clases del player para indicarle un mesh y propiedades físicas que le permitan interactuar con el mundo de forma correcta.
  • Crearemos las clases necesarias para configurar la cámara principal de nuestro juego, creando un estilo de juego 3ra persona.

Instalando UnCodeX

Antes de comenzar a preparar el proyecto, vamos a instalar y configurar UnCodeX, una excelente aplicación que nos servirá para explorar de forma mucho más cómoda, toda la jerarquía de clases del UDK. Para instalar y configurar el UnCodeX , primero lo descargamos desde aquí.

Una vez descargado he instalado vamos a Tree -> Settings en su menú principal. Seleccionamos Source Paths del panel de la izquierda y agregamos la ruta:

Ruta_hacia_la instalación_del_UDKDevelopmentSrc

Damos OK, y de nuevo en el menú principal seleccionamos Tree -> Rebuild and Analyse

Listo!!!. Ya tenemos todas las clases del UDK organizadas jerárquicamente.

Ya instalado y listo el UnCodeX vamos a comenzar con nuestro proyecto. Lo primero que vamos hacer es preparar el directorio donde estarán los scripts de nuestro juego.

Nota: Tener en cuenta que Unreal Engine 3 está diseñado para trabajar con un solo proyecto a la vez.

Configurando el directorio del proyecto

Para crear nuestro primer proyecto en UnrealScript vamos a movernos hasta la raíz de la instalación del UDK, una vez aquí localizamos la carpeta DevelopmentSrc. Dentro de esta carpeta creamos una carpeta con el nombre que le querramos dar a nuestro proyecto. Para este ejemplo la nombraremos SampleGame.

Dentro de esta carpeta SampleGame creamos otra carpeta y la nombramos: Classes

Ya estamos listos para comenzar a chocar con las primeras líneas en UnrealScript. 😉

UDK tiene toda una biblioteca de clases que nos servirán para heredar las funcionalidades “básicas” para cada elemento del juego. Conociendo esto vamos a crear las primeras clases para nuestro juego, las clases que representarán al Player.

El Player es controlado por dos elementos: PlayerController y Pawn.

PlayerController

PlayerController es el responsable de determinar como el jugador controla el personaje mediante sus dispositivos de entrada (teclado, mouse o lo que sea)

Si vamos al UnCodeX y buscamos la clase Controller, veremos que de ella heredan dos clases AIController y PlayerController. Para nuestro ejemplo, por el momento, es suficiente con crear una clase que herede de PlayerController. A grandes rasgos con heredar de esta clase tendremos lo necesario para lograr que el jugador pueda controlar los movimientos del personaje usando el teclado y el mouse.

Sabiendo esto, vamos a crear nuestra primera clase UnrealScript, muy sencilla, pero por algo se empieza no? :-)

Dentro de la carpeta Classes que creamos para nuestro juego vamos a crear el archivo SamplePlayerController.uc Lo editamos con cualquier editor de texto (en futuros tutoriales veremos como configurar Visual Studio y nFringe, para tener un IDE más potente para nuestro trabajo en UnrealScript, para este ejemplo con el notepad de Windows tenemos) y le agregamos la siguiente línea

class SamplePlayerController extends PlayerController;

Bien, nuestra primera línea en UnrealScript ;-). Lo que hemos hecho aquí es crear una nueva clase llamada SamplePlayerController que hereda de la clase del UDK PlayerController. Como mencionamos anteriormente, con heredar de PlayerController es suficiente para tener lo básico para el player.

Ya teniendo listo el PlayerController para nuestro personaje vamos a pasar a Pawn.

Pawn

Mientras PlayerController es la encargada de determinar cómo las entradas (mediante el teclado, mouse o cualquier otro sistema para comunicarse con el juego) del jugador son usadas para controlar el personaje principal. La representación visual del personaje y la lógica para determinar cómo interactuar con el mundo físico es encapsulada en Pawn.

Vamos a hacer el Pawn que controlará a nuestro personaje.

Dentro de la carpeta Classes de nuestro proyecto creamos un nuevo archivo llamado SamplePawn.uc y le agregamos la siguiente línea

class SamplePawn extends Pawn;

Como vemos, lo que hacemos aquí es muy parecido a lo que hacemos para crear nuestro PlayerController, simplemente heredamos de una clase base del UDK que ya tiene implementado el principio básico de todo Pawn. Por el momento con esto tenemos.

GameInfo

Ahora sólo nos queda crear el GameInfo de nuestro juego. Esta clase, a grandes rasgos, es la que determina las reglas del juego, las condiciones bajo las cuales el juego avanza o se termina, entre otras muchas cosas que iremos viendo poco a poco. Además GameInfo es la encargada de decirle al motor cuales clases debe usar como PlayerController, Pawn.

Sabiendo esto, entonces vamos a crear el GameInfo

En la carpeta Classes del proyecto creamos un nuevo archivo llamado SampleGame.uc y le agregamos las siguiente líneas

 class SampleGame extends GameInfo;

 defaultproperties{
 	PlayerControllerClass=class'SampleGame.SamplePlayerController'
 	DefaultPawnClass=class'SampleGame.SamplePawn'
 }

Bien aquí ya tenemos nuevas cosas, la primera línea a esta altura no nos debe asustar sencillamente heredamos de la clase GameInfo que nos brinda el UDK para facilitarnos un poco las cosas. Pero en este caso tenemos que inicializar dos variables miembro de esta clase que son PlayerControllerClass y DefaultPawnClass.

En UnrealScript el bloque defaultproperties dentro de una clase se usa para especificar valores por defectos a variables miembros de dicha clase. En este bloque la sintaxis de las asignaciones es ligeramente distinta al estándar del UnrealScript. La sintaxis para inicializar objetos (como es el caso) es la siguiente:

ObjectProp=ObjectClass’ObjectName’

Listo!!! Ya tenemos preparada todas las clases necesarias para nuestro primer ejemplo.

Compilando…

Antes de compilar necesitamos informarle al motor de la existencia de un nuevo proyecto. Para hacerlo vamos al archivo DefaultEngine.ini que se encuentra en Raiz_del_UDKUDKGameConfig, abrirlo con cualquier editor de texto y buscar la línea [UnrealEd.EditorEngine] inmediatamente debajo de esta línea habrán varias líneas que comienzan con +EditPackages .. . Pues aquí es donde tenemos que indicar la existencia de nuestro proyecto. Al final de este grupo agregamos nuestro proyecto, en nuestro caso, quedaría el bloque completo [UnrealEd.EditorEngine] de la siguiente forma:

 [UnrealEd.EditorEngine]
 +EditPackages=UTGame
 +EditPackages=UTGameContent
 +EditPackages=UDNGame
 +EditPackages=SampleGame

Listo, ahora si podemos compilar. Para compilar los scripts, podemos usar el UnrealFrontend o abrir el editor. En próximos tutoriales hablaremos del UnrealFrontend, pero en este caso lo haremos mediante el UDK Editor.

Abrimos el UDK Editor y nos saldrá un ventana preguntándonos: si queremos recompilar los scripts, le decimos que sí y esperamos que termine. Finalmente nos debe salir que todo el proceso terminó sin problemas

Creando un nivel sencillo para nuestro juego

Ya compilados los scripts y abierto el UDK Editor, vamos a crear un muy simple nivel para probar nuestro juego. Antes quiero aclarar que el diseño de niveles en UDK Editor es toda una profesión, pero evidentemente ese es el trabajo de los diseñadores de nuestro equipo 😉 En el caso que quieras aprender sobre este tema, te recomiendo libros como Sams.Mastering.Unreal.Technology Volumen I y II (el Volumen III que era de UnrealScript por desgracia fue cancelado). Por suerte, información para aprender a diseñar niveles con UDK Editor si hay bastante, con un poco de Google tendrás ;-).

Para nuestro ejemplo crearemos un nivel muy simple. O si prefieres, puedes cargar cualquiera de los mapas que trae el UDK de ejemplo.

Para crear una sencilla habitación donde probar lo que tenemos hasta ahora, con un Proyecto nuevo en el UDK Editor damos clic derecho sobre el Cubo en el panel de herramientas (en la izquierda del editor) En los valores de X, Y, Z de la ventana Brush Builder – Cube que se abre indicamos 1024, 1024 y 512 respectivamente. Damos Build y Close.

Seguidamente hacemos clic sobre el botón CSG Add del mismo panel de herramientas en la sección CSG. Se crea un cubo con las dimensiones indicadas.

Ahora volvemos a dar clic derecho sobre el Cube en el panel de herramientas y en los valores de X, Y, Z indicamos 1000, 1000 y 500 respectivamente. Build y Close.

A continuación hacemos clic sobre el botón CSG Substract de la sección CSG en el panel de herramientas. Con esto sustraemos del cubo grande prácticamente todo su interior dejando solo una pequeña pared que lo hace una habitación.

Ahora nos desplazamos en el ViewPort Perspectiva hacia dentro de esta habitación (podemos usar la rueda del mouse para movernos hacia adelante y hacia atrás en el ViewPort). Una vez dentro de la habitación creamos una luz. Para esto mantenemos presionada la tecla L y hacemos clic en el centro de la habitación. Ajustamos la posición de la luz hacia el techo de la habitación y listo.

Ya tenemos nuestro nivel diseñador, extremadamente sencillo pero perfecto para probar nuestro proyecto 😉

Ejecutando nuestro primer juego con UnrealScript

Bien, ya tenemos nuestro nivel creado, en este punto tenemos dos métodos para ejecutar nuestro proyecto sobre ese nivel.

1 – Indicar nuestro SampleGame en el Game Type For PIE del World Info.

2 – Indicar nuestro SampleGame como default game por defecto para el motor en el DefaultGame.ini.

Para este ejemplo usaremos la primera variante, en otros tutoriales veremos la segunda.

Ya con el UDK Editor abierto en el nivel que acabamos de diseñar y los scripts compilados, vamos a View en el menú principal del UDK Editor y seleccionamos World Properties. En la ventana que se nos abre desplegamos la sección World Info nos movemos hasta la propiedad Game Type For PIE y del combo box de su derecha seleccionamos nuestro proyecto (SampleGame). Cerramos y listo.

En el menú principal del UDK Editor seleccionamos Build – Build All. Cuando termine la compilación en cualquiera de los viewport seleccionamos clic derecho Play from Here.

BOOOM!!! 😀 Ya tenemos corriendo nuestro primer proyecto. Como es lógico lo logrado no es muy llamativo, pero independientemente de esto…., es bastante excitante, no es así? 😉

En este punto, tenemos un estilo de juego 1ra persona, con un Player sin Mesh, ni afectado por la gravedad (mira hacia arriba y avanza y veras a lo que me refiero :-) ), pero que se mueve por todo el nivel reaccionando perfectamente a las teclas que presione el jugador o a como mueva el mouse.

Para el próximo tutorial

Aquí terminamos esta introducción a UnrealScript. En el próximo tutorial seguiremos trabajando con este proyecto, vamos a agregarle un mesh al player para darle forma, vamos a agregarle propiedades físicas, vamos a agregar una cámara a nuestro juego para crearlo estilo 3ra persona, entre otras cosas.

Hasta entonces. . . 😉

Nota: Este proyecto fue hecho con la versión del UDK de Abril de 2011 (UDKInstall-2011-04-BETA)

Fernando Castillo Coello
Follow me

Fernando Castillo Coello

Gameplay Programmer at GameOlic
I've been into games development with Unreal Engine since 2014 and want to share with you some of the tips and tricks that I learned during my journey.
Fernando Castillo Coello
Follow me

12 pensamientos en “Introducción a UnrealScript – parte 1

  1. Alex

    Genial tutorial ^__^

    Solo una duda. Cuando creo el “package game” para crear un ejecutable, cuando lo pruebo me sigue apareciendo el modo “deathmatch”, es decir, que no asocia mi mapa con las “condiciones de juego” que he creado. Lo extaño es que en el testeo si va todo correcto, solo cuando “empaqueto” todo y lo pruebo instalado es cuando vuelve a salir ese modo por defecto
    ¿Alguna solución?
    Gracias.

    Responder
  2. Pingback: por favorr urgente linterna.

Responder a Alberto Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>