PFM: Sprint del personaje

En esta entrada veremos una manera sencilla de implementar el “sprint” en nuestro personaje. Durante el juego, cuando pulsemos la tecla Shift el personaje aumentará su velocidad. El sistema puede complicarse para que el personaje no sprinte por tiempo indefinido sino que tenga una energía que se agote, pero en este caso haremos la versión más simple.

PFMPawn

En primer lugar añadiremos las siguientes variables a nuestro Pawn, que contendrán las 2 velocidades posibles del personaje.


var float RunSpeed;                 // Velocidad normal
var float SprintSpeed;              // Velocidad máxima de Sprint

Sobreescribimos la función PostBeginPlay, para inicializar la variable GroundSpeed a RunSpeed. GroundSpeed es la variable que usa UDK por defecto para determinar la velocidad del Pawn.


simulated function PostBeginPlay()
{
    Super.PostBeginPlay();
    GroundSpeed = RunSpeed;
}

Activaremos y desactivaremos el Sprint con las siguientes funciones.


function StartSprint()
{
    GroundSpeed = SprintSpeed;
}

function StopSprint()
{
    GroundSpeed = RunSpeed;
}

Finalmente, damos valor a las variables en la sección defaultproperties


RunSpeed = 400      //Velocidad en suelo
SprintSpeed = 800          //Velocidad de sprint

PFMPlayerController

Para activar las funciones StartSprint y StopSprint del Pawn modificaremos PFMPlayerController, añadiendo las siguientes funciones exec que harán la llamada a las del Pawn.


exec function PulsaShift()
{
    if (PFMPawn(Pawn) != None)
    {
        PFMPawn(Pawn).StartSprint();
    }
}
exec function SueltaShift()
{
    if (PFMPawn(Pawn) != None)
    {
        PFMPawn(Pawn).StopSprint();
    }
}

Como ya vimos, las funciones exec pueden ligarse a una entrada de teclado, que en nuestro caso será la tecla Shift. Para hacerlo, deberemos editar el fichero de configuración DefaultInput.ini. Buscaremos la sección [Engine.PlayerInput] y añadiremos lo siguiente:

[Engine.PlayerInput]
Bindings=(Name="LeftShift",Command="PulsaShift | OnRelease SueltaShift")

De este modo, al pulsar el Shift izquierdo del teclado se llamará a la función PulsaShift, y al soltarla se llamará a SueltaShift.

Ya está, ya tenemos tecla para “sprintar”:

Para hacer que la animacion del personaje cambie dependiendo de su velocidad, puede usarse el nodo AnimNodeBlendBySpeed en su AnimTree. Este nodo hace un blend entre diferentes entradas en función de la velocidad del Pawn dueño del AnimTree.

pfm11_01

Banner Blog

Anuncios

33 pensamientos en “PFM: Sprint del personaje

  1. Hola Marcos .
    Tengos dos preguntas .. la primera como podria hacer que el tiempo de sprin dure 20 o 30 segundos .. la segunda es que al cojer una caja o señal o objeto en la pantalla(al cojer ese objeto que desasparezca por que supuestamente lo has cojido ,una especie de pozima al cojerla que cojas mas velocidad ) y que dure eso unos 20 o 30 segundos.
    Gracias.

    • Pues es un poco complicado.. te puedo dar algunas pautas pero decirte exactamente lo que tendrías que hacer me llevaría mucho tiempo.

      Primero deberías crear un objeto y ponerlo en el escenario, que sería tu poción. Una vez detectes cuándo el personaje coge dicho objeto, activarías un temporizador que haría que el personaje corriera más durante cierto tiempo. Una vez el temporizador se agotara, el personaje volvería a su velocidad normal.

      Como ves son muchas cosas para explicarte paso a paso si tienes muy poca base de programación. Si quieres aprender quizá lo mejor es que hagas tus propias variaciones de lo que consigas con mis tutoriales y sobre todo, entendiendo cada una de las líneas.

    • Gracias de nuevo ,,ire poco a poco .. seguire buscando por la red para aprender algo de programacion o k sea basica.. para hacer mis ideas que tengo en mente ,temporidazor etc…
      Gracias..

    • Hola Marcos.
      Me gustaria hacerte unas preguntas privadas de programación (serian remuneradas) ¿como puedo hacerlo?..
      Gracias de antemano.

    • Hola Sergio, qué tipo de preguntas? Las dudas de programación prefiero resolverlas por aquí para que puedan ser útiles para futuros visitantes, y sin cobrar 😀

    • Te comento al tener tantas dudas y no saber de programacion nivel 0.. me gustaria que me dieses clases o unos pequeños conocimientos por donde empezar para no volverme loco y saber lo que estoy haciendo.via online(skype) o presenciales soy de Madrid.o unos tutoriales o un blog como este que has hecho que es buenisimo.algo para aprender..si puedes y quieres te lo agradeceria muchisimo por que cada dia mas me gusta UDK y se queda la miel en los labios..
      Gracias Marcos

    • Verás.. yo ahora no tengo tiempo para dar clases. La programación en UDK es dificil y nada recomendable para un principiante. Si de verdad quieres aprender, te recomiendo que tengas paciencia y primero aprendas con cualquier lenguaje orientado a objeto (C++, Java, etc) pues los conceptos que aprenderás son idénticos en UnrealScript.

      El problema con UDK es que hay que entender el código existente para poder hacer algo y eso sin idea de programación es imposible. Para C++ y java hay miles de libros, tutoriales, cursos, etc, que empiezan por lo más básico. Piensa que conceptos como variables, funciones, bucles, etc, son comunes entre C++, java, unrealscript y la mayoría de lenguajes. Dado que para unrealscript no hay tutoriales desde 0 en español, deberás entender esos conceptos básicos en otros lenguajes.

      Sin saber nada nada de programación, aprender a programar en UDK es muy dificil. Y tardarás más que si primero aprender los conceptos básicos de programación en otro lenguaje y luego vuelves a UDK.

      Por otro lado, quizá te convendría echar un vistazo a Unity. Es un motor con una versión gratuita bastante decente y es más sencillo empezar a programar con él. Además hay una gran comunidad y muchos tutoriales y cursos gratuitos.

      La programación no es una cosa de 2 días, ni 2 meses, sino más bien de años XD Si de verdad quieres aprender, debes tener paciencia e ir poco a poco, empezando por los cimientos.

  2. Muchas gracias por la la aclaraciones ,entonces empezare por lo basico y con Unity. creo que la programacion de unity3d es javascript ..verdad??…..estado mirando y la verdad que si hay bastantes cosas..
    Puedo comenzar con javascript a prender los conceptos variables,bucles,etc..
    Se que es un proceso de años para aprender ,tendre paciencia y constancia..
    ¿como motor grafico el unity que tal es? se pueden hacer cosas chulas con el..¿es algo mas sencillo de aprender que el udk?
    Gracias por todo.

    • Unity puede programarse tanto en javascript como C# (que es una “variación” de c++). Es una buena manera de empezar con la programación y obtener resultados más visuales. Siguiendo los tutoriales te será fácil tener algo moviéndose en poco tiempo.

      Unity está cada vez más en auge por ser multiplataforma y aunque no es tan potente como un CryEngine o UDK, no está nada mal. Desde luego es más sencillo que UDK (bastante), pero he visto cosas bastante chulas. Y la mayor ventaja es su comunidad, si se te ocurre algo que quieras hacer, lo más probable es que alguien ya lo haya hecho y encuentres algún tutorial o código para ayudarte.

      Hace un año estuve trabajando en algunos proyectos con Unity:

      Y para que veas la potencia que tiene, lo siguiente es una cinemática en tiempo real:

  3. Gracias marcos eres un tio grande ..de verdad..
    hoy mismo he empezado ya a buscar informacion de javascript..ya se que son variables,funciones..etc.. gracias de nuevo por las molestias..ya te ire preguntando cosas..

    • Se puede extender de la que se quiera mientras se sepa lo que se hace. UTPlayerController extiende de UDKPlayerController así que extendiendo de UTPlayerController tengo algunas funcionalidades extra que no están en UDKPlayerController y todas las que tiene UDKPlayerController (que extiende de GamePlayerController (que extiende de PlayerController (que extiende de Controller (etc)))).

      Yo extendí de UTPlayerController por algunas funciones de la cámara, pero también se podría extender de UDKPlayerController y escribir las funciones que se necesiten. Siendo muy perfeccionistas sí, lo ideal o más ordenado sería extender de UDKPlayerController, por no “mezclar” proyectos, pero vamos, se puede extender de lo que más convenga en cada caso.

  4. Marcos disculpa una pregunta como aria para aser que camine con crouch en el anim tree cree un AnimNodeBlendByPosture pero como seria en el Script para que funcione me podrias ayudar porfavor o si no es asi explicarme un poco de como hacerlo para caminar agachado

  5. Marcos osea quisiera la verdad lograr esto veras quiero precionar una tecla como la Q por ejemplo y que se reproduzca una animacion pero que no este en el animtree solo en el animset o nose me podrias ayudar basicamente deseo presionar una tecla y que reproduzca una animacion
    Gracias por tu atencion amigo 🙂 respondeme cuando tengas tiempo

  6. Buenas Marcos

    Verás tengo un problemilla para asignar una tecla a mi proyecto

    Mi proyecto hereda del MOBA Starter Kit (MOBA Gem Kit en UDN), y he creado una función personalizada que funciona correctamente por consola

    Ahora si la asocio al LeftShift, me funciona perfectamente al pulsar la tecla, pero si la asocio al SpaceBar, se sigue sobrescribiendo la función que había anteriormente (SwitchTeam)

    El caso es que no he encontrado ninguna referencia sobre esta asociación en ningún archivo del paquete

    ¿Existe alguna otra vía de asociar comandos a teclas?

    • Hola Ruben, por lo que veo el MOBA Starter Kit no trae un .ini para sustituir al original de UDK y así cambiar la asociación de teclas a funciones, por lo que al apretar la tecla espacio por defecto se ejecutará la función Jump. El motivo de que no te haga caso creo que puede ser que aunque hagas la asociación correctamente en el DefaultInput.ini, en líneas posteriores esa asociación se sobreescribe por la original de UDK.
      Prueba lo siguiente, busca esta línea en DefaultInput.ini y coméntala poniéndole un ; delante

      .Bindings=(Name=”SpaceBar”,Command=”GBA_Jump”)

      A ver si así te funciona

    • Gracias por contestar Marcos

      La he comenta y ¡ha funcionado!

      pero a mitad…

      El caso es que ahora ejecuta mi comando y también ejecuta la acción de cambiar de equipo

      Con lo cual debe haber algo en el código uc que ejecute también esta acción

      He encontrado un archivo de extensión .int, que no se que es lo que hace

      Pero en la linea 33 aparece esto:
      spacebar=SP

    • Vaya! Pues por lo que he visto en el código del MOBA Kit, la función SwitchTeam sólo se llama desde las funciones OnDemoGuyPress y OnCathodePress, que se encuentran en la clase UDKMOBAGFxHeroSelectionObject.
      Me da la impresión de que esa ventana de selección de equipo se queda oculta tras hacer la primera selección y de alguna manera la barra espaciadora sigue “activando” los botones..
      Puedes probar a comentar las líneas 47 y 59 de UDKMOBAGFxHeroSelectionObject a ver si efectivamente pasa algo así.

  7. Hace un par de días que descubrí esas lineas y caí en la misma cuenta, con lo cual en switch team controlé que si ya te habías cambiado a un equipo no te dejase volver a hacerlo

    Pero hoy te vengo con nuevas dudas, las cuales he buscado mucho y no consigo encontrar respuesta.

    1º ¿Existe alguna combinación de teclas para mover, rotar o escalar una superficie con mayor precisión?

    Me explico: Como nunca he modelado, me he puesto a toquetear editor de UDK, y parece sencillo, pero en ocasiones me ocurre que intento mover un pincel o un mesh a un punto en concreto, pero se me va mucho hacia un lado o hacia el otro, y yo lo quiero justamente en medio

    2º ¿Es una locura construir un mapa completamente con superficies de UDK? (Evitando el uso de Software de modelado externo al editor, como blender o 3D Studio)

    3º He creado un puente(o eso parece/intenté XD) en un proyecto UDK, y he intentado llevarlo a otro mapa como superficie, pero solamente he conseguido trasladarlo a otro proyecto convirtiéndolo en un Static Mesh (con sus colisiones) ¿Existe alguna manera de importar un proyecto a otro?

    • Hola Ruben

      1. Puedes ajustar el tamaño de la cuadrícula para ajustarla e incluso deshabilitarla completamente. En la barra de abajo del editor verás a la derecha unos números y botones que puedes desplegar para ajustarlo.

      2. Bueno, no es una locura, pero no es la mejor manera. Depende del grado de detalle que se quiera conseguir. Los brushes van bien para habitaciones grandes o estructuras simples, pero conseguir la complejidad que se puede alcanzar con static meshes es muy complicado y poco eficiente. Por otro lado usando static meshes es más fácil reaprovechar elementos en distintos escenarios. Fíjate que si en los mapas de Epic quitas todos los static meshes queda una estructura de brushes super simple, con unos pocos bloques que definen la forma general del mapa.

      3. La verdad que no he probado a importar brushes de un mapa a otro.. pero si lo puedes convertir a Static Mesh y usarlo no es un problema no? Este caso del puente que quieres usar en varios mapas es un buen ejemplo de la utilidad de hacer modelos externos e importarlos al motor para reutilizarlos.

    • Gracias marcos por tu ayuda, seguiré investigando más sobre este motor

      Te paso una captura de lo que me ha dado tiempo hacer por las noches después del curro

      No es gran cosa, pero se parece más a un puente que su version 0.1 xD

    • Está chulo! Pero no descartes aprender a manejar algún programa de modelado 3d, podrías hacer modelos más complejos y de forma más rápida.

  8. amigo ! no me funciona, me sale el siguiente error: Unexpected ‘RunSpeed” y no se como solucionarlo, por favor, me encantaría que me ayudaras te lo agradecería mucho 🙂 excelente blog por cierto!, pero lo único que me ha funcionado es ponerlo en 3ra persona jaja, ayuda saludos !

  9. Hago todo igual que tú, pero no esprinta el personaje, tengo activado Dgame(el nombre que utilice para el script) en el UDK pero no esprinta y a la hora de actualizar los scripts del UDK no me sale ningún error ni advertencia, alguna solución?

  10. Hola! antes que nada, agradecer el curro de los tutoriales… creo que somos muchos los que estamos aprendiendo gracias a ellos. Buen trabajo!

    He seguido todos los pasos para poder sprintar con el personaje y me funciona, PERO antes tengo que pulsar shift+tecla de dirección para poder activar la función, si no, va muy muy rápido.
    Qué estoy haciendo mal? Soy muy novato programando…

    También me gustaria comentar que sería muy interesante colgar el contenido de cada tutorial al final de cada entrada. Eso ayudaria mucho a los mas perdidos. O todas las Classes, es fácil liarse de un tutorial a otro.

    Muchas gracias otra vez!

    Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s