Muy buenas,
Hoy vamos a realizar un pequeño experimento, y para ello necesitamos presentar la clase PlayerInput. PlayerInput es una clase auxiliar de PlayerController para desligar de éste la parte de “bindeo” de teclas e input de la propia clase.
La estructura básica de PlayerInput es esta:
Tendremos que añadir en NULLPlayerController en defaultProperties
InputClass=class ‘NULLGame.NULLPlayerInput’
Por supuesto, ya sabéis como modificar ese valor para que se adecue a vuestro proyecto.
Una vez hecho esto, echemos un vistazo a las funciones exec para saber en qué consisten :
PlayerInput
PlayerController y PlayerInput pueden utilizar un tipo de funciones especiales indicadas por el prefijo exec antes de colocar function en su declaración tal que así:exec function NombreDeLaFuncion( float amount = 100)
Podéis consultar información sobre este tipo de funciones en la UDN: UDN link
Todas las funciones que sean declaradas con exec, pueden ser llamadas desde la consola de comandos de UDK. ¿Cómo activarla? Cuando ejecutéis el juego, pulsáis tab. ¡Ahí está!
Uno de los comandos típicos es "exit" o "quit" para salir del juego.
En ese caso tenemos un valor por defecto que es 100 si no usamos ninguno. Recordad que los parámetros por defecto se coloquen los últimos. En la consola de comandos, se llamaría a dicha función como NombreDeLaFuncion 50 para pasarle el valor 50. Por supuesto, si no colocamos ningún parámetro, cogería por defecto 100.
La primera utilidad que se os puede venir a la cabeza, es como un sistema de debug. Como vimos en la parte de HUD, podemos crear funciones que realicen `log() con información que queramos consultar, o bien utilizar "trucos" o modificar valores en tiempo real. No es la manera más cómoda de hacerlo, pero no deja de ser un recurso más.
A parte de esto, en el fichero de configuración DefaultInput.ini (situado en UDKGame/Config), podemos "bindear" teclas o grupos y acciones de las mismas a este tipo de funciones. Con esto, ya podemos ver, que su otra utilidad es la de crear un enlace entre el input de vuestros periféricos y vuestro código.
Si consultáis DefaultInput os podéis encontrar entre sus entrañas líneas como estas:
.Bindings=(Name=”RightMouseButton”,Command=”EnableAimingMode | OnRelease DisableAimingMode”)
En Name, se coloca el nombre del código de tecla o KeyBind (consultar UDN para ver los existentes y más información al respecto). Cuando dicha tecla se pulsa, se ejecuta la función exec con el nombre EnableAimingMode. El símbolo | indica una concatenación de eventos que pueden llamar a otra función, en este caso, OnRelease, indica que cuando dejamos de pulsar la tecla, se llama a la función DisableAimingMode.
Vamos a ver un poco cómo funciona el fichero DefaultInput.ini:
Los comentarios en los ficheros ini se realizan colocando un ; como primer carácter de línea (se ignora lo que vaya detrás). Si véis un + o un - tiene que ver con declaraciones anteriores y herencias entre ficheros ini, siendo respectivamente cada símbolo para añadir o quitar funcionalidad (dependiendo de las líneas donde se encuentren como primer carácter ese + o ese -).
Como ves, los bindings tienen el nombre asignado de la tecla o acción (luego vemos lo que son acciones, pero básicamente es agrupar input para unificar teclado con un mando por ejemplo). En command se escribe el comando que deseamos como si lo estuviéramos realizando en la consola.
Colocar el .Bindings lo que hace es asignar un valor al Binding indicado en Name. Pero también podemos eliminarlos colocando un -Bindings.
Para añadirlos es utilizando el signo + como podéis comprobar en partes del mismo fichero:
En ésta última linea, podemos ver que Command posee un | onrelease y el nombre de otra función exec. Eso significa que cuando la tecla o acción asignada se pulsa, se llama a la función exec primera y cuando se deja de pulsar se llama a la función tras onrelease.
De este modo ya podemos intuir cómo podemos realizar un cambio de estado de PlayerController o simplemente modificar el comportamiento de nuestro personaje a través de este tipo de funciones. Hay mucha información y más detallada sobre estos temas en la UDN:
KeyBind, Con información de teclas y acciones para asignar
Una vez estudiado un poco este funcionamiento, conocemos lo básico para realizar una llamada a una función propia de nuestro CharacterController. Procederemos a modificar nuestro UKNPlayerInput:
Como podemos ver, podemos asignarle un valor a dicha función. En este caso lo utilizaremos para comprobar que podemos pasar por parámetro valores en en la consola de comandos, para quizá utilizar alguna función a modo de debug.
La función ReturnYourDirtyMoney la utilizaremos al soltar la tecla.
Para hacerlo funcionar, vamos a DefaultInput.ini y añadamos valores:
Ahora probemos nuestro ejemplo, pulsando X se mostrará un mensaje y al soltarlo el otro. Además podemos probar que nos muestra diferentes valores si llamamos al comando por la consola de comandos y le pasamos un parámetro.
Se puede extrapolar este funcionamiento a cualquier cosa que queráis, como cambios de cámara, de estado, etc…
No hay comentarios:
Publicar un comentario