PFM: Interfaz en UDK – HUD sencillo

En UDK hay dos formas de implementar las interfaces, usando Canvas o Scaleform. Scaleform permite la creación de interfaces mediante películas Flash, que son importadas por UDK y mostradas en pantalla como parte del juego. Canvas es algo menos sofisticado pero igualmente válido, por lo que en principio usaremos el Canvas para crear la interfaz. En esta entrada crearemos un sencillo HUD (Head-Up Display), que mostrará durante el juego la vida del jugador y una mirilla para apuntar con el arma. Más adelante esta interfaz será mejorada con datos sobre las armas y otros, pero de momento servirá como comienzo.

Documentación en UDN sobre creación de interfaces

Creación de un sencillo HUD

Como su nombre indica, el método del Canvas se basa en usar la pantalla como si fuera un lienzo, sobre el que se van pintando los diferentes elementos que conformarán la interfaz. La clase encargada de esto suele derivar de HUD, así que crearemos nuestra propia PFMHUD, que se encargará de pintar la salud y la mirilla en pantalla.

class PFMHUD extends UDKHUD;

var const Texture2D CrosshairTexture;

event DrawHUD()
{
    super.DrawHUD();

    if(PlayerOwner != none && PlayerOwner.Pawn != none)
    {
        // Se pinta el texto
        Canvas.DrawColor = WhiteColor;
        Canvas.Font = class'Engine'.Static.GetLargeFont();
        Canvas.SetPos(canvas.ClipX * 0.01, Canvas.ClipY * 0.85);
        Canvas.DrawText("HEALTH:"@PlayerOwner.Pawn.Health);

        // Se pinta la mirilla
        Canvas.SetPos(canvas.ClipX * 0.5 - CrosshairTexture.SizeX/2, Canvas.ClipY * 0.5 - CrosshairTexture.SizeY/2);
        Canvas.DrawColor = WhiteColor;
        Canvas.DrawTile(CrosshairTexture, CrosshairTexture.SizeX, CrosshairTexture.SizeY, 0.0f, 0.0f, CrosshairTexture.SizeX, CrosshairTexture.SizeY,, true);
    }
}

defaultproperties
{
    CrosshairTexture=Texture2D'PfmInterface.Crosshair.Crosshair'
}

Ahora, para que el juego utilice este HUD, hay que modificar en PFMGame (que deberá extender de UDKGame para que no aparezca la interfaz de UT), añadiendo en defaultproperties:

HUDType=class'PFM.PFMHUD'

Con esto ya tendremos nuestro sencillo HUD funcionando.

Como vemos la salud se actualiza automáticamente, ya que la estamos sacando del Pawn directamente desde el HUD en esta línea:

Canvas.DrawText("HEALTH:"@PlayerOwner.Pawn.Health);

Banner Blog

Anuncios

32 pensamientos en “PFM: Interfaz en UDK – HUD sencillo

  1. Pingback: PFM: Interfaz en UDK – Menú de Pausa | El Blog de Marcos

  2. Saludos Marco otra vez molestando por aqui xD…..
    tengo un problema el HUD… no em aparece en pantalla, pero no se si es q lo afecta el otro q esta en el lado derecho …. q fue el unico q quedo .. aqui te dejo una imagen…

    “http://fotos.subefotos.com/1a6fa8c4aa611c7e635d7e73356b2deeo.png”

    Gracias por tu paciencia.

    • Tu PFMGame extiende de UTGame o de UDKGame? Esa interfaz que te aparece proviene de UTGame por lo que seguramente estés extendiendo de esta. Prueba con UDKGame, que no pinta ninguna interfaz.

    • class PFMGame extends UTDeathMatch;

      var PFMEnemySpawner enemySpawner;

      simulated function PostBeginPlay()
      {
      local PFMEnemySpawner ES;

      super.PostBeginPlay();

      //Se busca el enemySpawner
      foreach DynamicActors(class’PFMEnemySpawner’,ES)
      enemySpawner = ES;
      }

      exec function SpawnEnemies(int num)
      {
      enemySpawner.SpawnPFMEnemies(num);
      }

      exec function SpawnEnemy()
      {
      enemySpawner.SpawnPFMEnemies(1);
      }

      defaultproperties
      {
      class PFMGame extends UDKGame;
      //Se especifica el Pawn por defecto
      DefaultPawnClass=class’PFM.PFMPawn’
      //Se especifica el controlador
      PlayerControllerClass=class’PFM.PFMPlayerController’
      }

    • No lo sé la verdad. UDK es bastante estable pero a veces tiene algún error. Si te sigue ocurriendo quizá debas reinstalar…

  3. ¿Cómo se podría hacer que el punto de mira sólo apareciera cuando está portando las armas de disparar?

    He probado a poner un “if(WeaponType == PWT_AimRight)” pero me da error.

    • Te da error porque WeaponType es una variable del PFMPawn, desde la clase HUD no puedes accederla directamente. HUD tiene una variable PlayerOwner que hace referencia al controlador, así que puedes acceder al Pawn y al WeaponType así:
      PFMPawn(PlayerOwner.Pawn).WeaponType
      Y comprobando el WeaponType puedes escoger si dibujar la mirilla o no, tal como dices.

  4. Buenos días marcos 🙂 marcos tengo una pregunta el Hud me funciona muy bien pero cuando mis enemigos se me montan en la cabeza mi salud empieza a disminuir, me gustaría saber por que?? he mirado en el código pero no he encontrado una linea de código que se asemeje a eso

    • Hola Camilo, el motivo es muy sencillo. CUando un Pawn se subre a otro, por defecto le causa daño.
      Esto se debe a la variable del Pawn bCanBeBaseForPawns, que por defecto está a false y por eso tu personaje recibe daño cuando otro se le sube. Ponla a true en las defaultproperties de tu personaje y no ocurrirá. 😀

  5. Hola Marcos queria agradecerte por todos tus tutos y pedirte que sigas haciendo mas tutoriales son geniales los mejores no estaria mal un tuto sobre sonidos de armas o al caminar o un tuto sobre checkpoints y saber que nivel te corresponde al cerrar y abrir de nuevo el juego obio con el juego compilado en un exe con varios niveles

  6. Macos disculpa una inquietud nose si podrias ayudarme como ago para pintar la municion en la pantalla me puedes ayudar porfavor ya tengo limitada mi municion y tambien cargadores mi variable que cuenta las balas es AmmoCount situada en AMWeapon. Funciono perfecto la vida pero nose como pintar la municion en pantalla gracias desde ya 🙂

    • Igual que accedes a la salud del Pawn con Pawn.Health, puedes acceder al arma actual con Pawn.Weapon. Como este Weapon no es del tipo AMWeapon, debes hacer un casting así: AMWeapon(Pawn.Weapon) y así podrás acceder a la munición con algo del estilo AMWeapon(Pawn.Weapon).Ammo 😉

  7. El problema es que nose como llamar a la variable AmmoCount de AMWeapon
    a la clase HUD quisiera que me ayudes con eso porfavor solo eso

  8. Disculpa marcos por molestar se que debes estar muy ocupado y cansado lei que tu juego ya esta y lo espero con ansias 🙂 pero cuando puedas quisiera que respondas si
    quisiera saber si me puedes explicar lo del casting como se hace y en donde en AMWeapon o en AMHUD y como lo ago podrias ayudarme porfavor

    en AMWeapon
    tengo la variable
    var repnotify int AmmoCount;

    y en AMHUD

    intento llamarla asi

    local AMWeapon AMMO;

    AMMO=AMWeapon(Pawn.Weapon).AmmoCount;

    y luego imprimir ese AMMO pero no puedo quisiera talbes si me podrias dar un ejemplo de como deberia ser o quedar para imprimir en el Canvas.DrawText
    porfavor te lo agradeceria mucho marcos y de nuevo perdon por molestar

    • Fijate que estás intentando guardar el valor de AmmoCount (que es de tipo int) en AMMO (que es de tipo AMWEapon), lo cual no puede funcionar de ninguna manera 😀
      Prueba a poner
      local int AMMO;

      El casting es muy básicamente cambiar el tipo de una variable. NO se puede hacer casting de un tipo a cualquier otro, pero en este caso, el Weapon almacenado en el Pawn es también un AMWeapon, por lo que se puede cambiar el tipo de Weapon a AMWeapon y así poder acceder a sus variables propias.

  9. marcos esque intente eso porque ya lo puse asi

    local int AMMO;

    AMMO=AMWeapon(Pawn.Weapon).AmmoCount;

    pero me marca este error

    Error, Bad or missing expression fot token: AMWeapon, in ‘=’

    porque podria ser que estoy asiendo mal ?

    • Creo que no te lo puse exactamente correcto, prueba así:

      AMMO = AMWeapon(PlayerOwner.Pawn.Weapon).AmmoCount;

      Ya que desde el HUD no se puede acceder directamente al Pawn, pero si a PlayerOwner, que es una referencia al controller.

  10. muchas gracias marcos funciona perfecto gracias amigo por tu tiempo y paciencia encerio
    y pues ya quiero tu juego se ve muy bueno lo espero con ansias 🙂

  11. hola marcos, queria hacerte una pregunta s que resulta que me salen dos errores al compilar en FPMHUD y es con respecto a

    {
    CrosshairTexture=Texture2D’PfmInterface.Crosshair.Crosshair’
    }

    y queria saber si sabes que es lo que es “PfmInterface.Crosshair.Crosshair” me dice que falta o no existe en el compilador, para ver si se puede reemplazar… en el compilador la primera vez me salieron los dos errores en amarillo y luego me dejo abrir udk asi como si estubiera bien lo deje pasar y probe a jugar y si sale abajo a la isquiera la vida xd que cosa mas rara dije jeje, y bueno todavia no logo arregrar el error que no permite cambiar de perfiles entre estar sin armas o no :s, si logro solucionarlo lo comentare para los mas nuevos

    • Hola Renato, “PfmInterface.Crosshair.Crosshair” se corresponde con la ruta de la textura para la mirilla. En el editor de UDK debes importar la textura que quieras usar y entonces obtener la ruta de dicha textura y sustituirla en el código.

  12. Marcos, estoy siguiendo sus tutoriales, uno por uno y estoy encantado con los resultados hasta ahora, una duda que me vinieron fue porque el mirilla no está apareciendo en mi HUD, por lo que parece que tengo que importar algo para UDK?

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