sábado, 5 de octubre de 2013

0) Esqueleto base de una clase. Actor y sus ActorComponents

¡Muy buenas!

Antes de comenzar nada, me he dado cuenta que tenemos que hablar de la clase Actor y del esqueleto que tiene una clase en unrealscript.

Para comenzar, la clase más básica de la que debemos heredar teniendo funcionalidad de objeto que se encuentre en escena, es la clase Actor. También existe la clase Object, pero esta es más abstracta y no se utiliza para objetos que colocaremos en la escena, si no para clases auxiliares y otras funciones.

Lo primero y principal, es saber que una clase de UDK se declara del siguiente modo:

class <nombredelaclase> extends <nombredelaclasepadre>;

Como veis, debéis cambiar lo que hay entre <> por el nombre de vuestra clase y la clase que debéis heredar. Si hacéis un objeto básico, como estamos hablando quedaría del modo:

class MyObjeto extends Actor;

Esto es lo más sencillo que podemos declarar una clase. Existen "flags" que podemos declarar, o bien crear interfaces en UDK (con el flag abstracto o usar within para crear una especie de clases "amigas"). Es recomendable buscar un libro (por ejemplo un Cookbook) que os cuente más sobre el propio lenguaje Unrealscript.

Los flags se colocan después de extends <ClasePadre> y antes del ;

Algunos muy interesantes son:

ClassGroup(<CategoríaEnElContentBrowserActorClasses>)

- Sirve para clasificar nuestras clases bajo un grupo (una categoría o etiqueta) en la pestaña Actor Classes del Content Browser (el botoncito en el editor que tiene una U de unreal).

placeable

- Sirve para hacer que un objeto se pueda colocar en la escena. Se puede seleccionar desde la pestaña Actor Classes del Content Browser y colocar directamente en un mapa arrastrando o con botón derecho del ratón en una posición de la escena, addActor del tipo que tengáis seleccionado. Un Pawn, una caja de vuestro juego, un enemigo, son ejemplos más sencillos de clases que son "placeables".

Config(<NombreDeUnFicheroIni>)

- Podemos inicializar nuestras variables desde un fichero .ini alojado en UDKGame/Config en nuestra instalación de UDK. Para ello, basta con crear un fichero ini allí con el nombre DefaultNombreDeUnFicheroIni.ini que hayamos colocado en el flag y dentro del fichero de texto, colocar
[<NombreDeLaCarpetaDondeEstánNuestrosScripts>.<NombreDeLaClaseQueQueremosTenerUnaVariableEnEsteFichero>]

Por ejemplo, si mi clase es MyPawn y mis scripts de juego están en la carpeta Development/Src/MyGame, tendría que escribir en el fichero ini [MyGame.MyPawn]. Debajo de esa linea, ya podré inicializar una variable de la clase siguiendo el mismo formato que tendremos en DefaultProperties como veremos más adelante.

Una vez llegados a este punto vemos el esqueleto base de una clase:

class MyClass extends Actor placeable;
 
var float fMyFloat;

//Declaración de una función. Tiene un parametro normal, uno por referencia, y uno opcional
function MyFunction(float myParam, out float myParam2, optional float myParam3=3.0f)
{
local float myFloatLocal;

//Las variables dentro de funciones se declaran siempre debajo de la declaración de la función y se utiliza //local. Si no os dará fallo.
}

//Tened cuidado de colocar la llave (símbolo {) debajo de defaultProperties o tendréis un fallo de //compilación raruno.
defaultproperties
{
//Aquí se declaran las variables que tenemos arriba, debajo de la declaración de la clase
//Tened cuidado y no colocad ; al final ni procurad dejar espacios.
fMyFloat=3.0f
}

Como podéis ver, la manera básica de crear una clase es esta. Pero no termina todo aquí, nos falta una parte fundamental y básica del comportamiento de las entidades en UDK: los ActorComponents.

ActorComponents

Un actor en UDK tiene funcionalidad básica dentro de un mapa cargado. Para que nos hagamos una idea, está preparado para funcionar en UDK, pero es básicamente un punto en el espacio con una rotación (tipo Rotator y se llama Rotation) y una posición en el mundo (Vector y se llama la variable Location).

Actor funciona como un "Mr Potato". Le añadimos a esa posición y rotación diferentes piezas. Las más básicas son los ActorComponents (CylinderComponent) que actuarán como colisión, los que le darán una forma (SkeletalMeshComponent, StaticMeshComponent, que son mallas con huesos y sin ellos respectivamente) y algún componente para que pueda reaccionar con las luces dinámicas (DynamicLightComponent).

La documentación sobre ellos es bastante clara en la UDN, de modo que no me enredaré, en el tutorial y os dejaré que echéis un vistazo y comprobéis cómo se inicializan los mismo. IMPORTANTE: Es necesario hacer ese esfuerzo y comprender bien los ActorComponents antes de avanzar en los tutoriales u os volveréis locos.



No hay comentarios:

Publicar un comentario