lunes, 23 de diciembre de 2013

04 Menu de pausa basico

Vamos a realizar un script muy sencillo que habra un menu de pausa al apretar la tecla P utilizando javascript.
Link al final del post
Primero definimos las variables:
    var mainMenuSceneName : String; Escena principal
    var pauseMenuFont : Font; Tipo de letra del menu de pausa
    private var pauseEnabled = false; Cuando empieza el juego el menu no es 
visible
    var MyGuiSkin: GUISkin; skin Para los botones
    var fondo : GameObject; fondo del menu
Despues con la funcion start definimos el volumen del juego como activado
y el tiempo normal
    function Start(){
    pauseEnabled = false;
    Time.timeScale = 1;
    AudioListener.volume = 1;
    Screen.showCursor = false; Si queremos que se vea el cursor ponerlo en true
Si se presiona la tecla P se detendra el juego, el volumen baja a 0.
Para hacer eso se necesita la funcion Update
function Update(){
        boton que llama el menu
 if(Input.GetKeyDown("p")){
 if(pauseEnabled == false){
   pauseEnabled = true;
   AudioListener.volume = 0;
   Time.timeScale = 0;
   Screen.showCursor = true;
  }}}
 Y el resto del script lo pongo tal cual ya que es bastante simple y solo se
 necesita saber un poco de javascript

private var showGraphicsDropDown = false;

     function OnGUI () {

GUI.skin = MyGuiSkin;                     
GUI.skin.box.font = pauseMenuFont;
GUI.skin.button.font = pauseMenuFont;


if(pauseEnabled == true){

// fondo del menu


     fondo.gameObject.active = true;

 

 
 // botones del menu
 
 // Resumen

  if(GUI.Button(Rect(Screen.width /2 - 150,Screen.height /2 - 110,250,50), "Resumen")){
   //Vuelve al juego
     
  if(pauseEnabled == true){
   
  fondo.gameObject.active = false;
   
   pauseEnabled = false;
   Time.timeScale = 1;
   AudioListener.volume = 1;
   Screen.showCursor = false;   
  }

   
  }

 
 
 
 
 
// boton calidad visual del juego 
if(GUI.Button(Rect(Screen.width /2 - 150,Screen.height /2 - 60 ,250,50), "Calidad Grafica")){
if(showGraphicsDropDown == false){
showGraphicsDropDown = true;
}
else{
showGraphicsDropDown = false;
}}
//funcion para la calidad de imagen del juego
if(showGraphicsDropDown == true){
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 ,250,50), "Fastest")){
QualitySettings.currentLevel = QualityLevel.Fastest;
}
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 + 50,250,50), "Fast")){
QualitySettings.currentLevel = QualityLevel.Fast;
}
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 + 100,250,50), "Simple")){
QualitySettings.currentLevel = QualityLevel.Simple;
}
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 + 150,250,50), "Good")){
QualitySettings.currentLevel = QualityLevel.Good;
}
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 + 200,250,50), "Beautiful")){
QualitySettings.currentLevel = QualityLevel.Beautiful;
}
if(GUI.Button(Rect(Screen.width /2 - 500,Screen.height /3.5 + 250,250,50), "Fantastic")){
QualitySettings.currentLevel = QualityLevel.Fantastic;
}
   
if(Input.GetKeyDown("escape")){
showGraphicsDropDown = false;
}}
// volver a menu principal
if(GUI.Button(Rect(Screen.width /2 - 150,Screen.height /2 - 10,250,50), "Volver a menu principal" )){
Application.LoadLevel(mainMenuSceneName);}
// salir del juego
if (GUI.Button (Rect (Screen.width /2 - 150,Screen.height /2 +40,250,50), "Salir del juego")){
Application.Quit();
}}}
Link: http://www.mediafire.com/download/16xc3o74l5a4xvx/Menu+Pausa.rar

03 IA Basica para los enemigos

Vamos a crear una Inteligencia Artificial muy basica para los enemigos con javascript.
Dejare el enlace de descarga al final del post
Primero creamos las variables:
    var player : GameObject; Declaramos al jugador
    var speed : float=6f; Velocidad
    var range : float=10f; Rango para que el enemigo te persiga
    var hitRange : float=5f; Rango para que te ataque
    var enemyDamage : float=10f; El daño que te aplica
    var rotationSpeed : float=5f; La velocidad con la que rota
    var damageTimer : float=0f; El tiempo que tarda en atacar
 
Primero en la funcion Start buscamos al jugador
    function Start(){
        player = GameObject.FindGameObjectWithTag("Player");
    }
 
Si el enemigo ya esta a cierta distancia del personaje que se mueva en esa direccion y ademas que rote
    function Update()
    {
        // Move the Player
        var distance = Vector3.Distance(transform.position, player.transform.position);
        if(distance<=range)
        {
        // Translate
            var delta = player.transform.position - transform.position;
            delta.Normalize();
            delta.y = 0;
            var moveSpeed = speed * Time.deltaTime;
            transform.position = transform.position + (delta * moveSpeed);
     
        // Rotate
            transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(delta), rotationSpeed * Time.deltaTime);
        transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0); 
Y ahora que aplique el daño conforme a el tiempo entre ataque y ataque declarado el la variable damageTimer
   
            damageTimer+=Time.deltaTime;
            if (distance < hitRange && damageTimer>=1.5)
            {
                damageTimer=0f;
                player.SendMessageUpwards
                ("ApplyDamage", enemyDamage, SendMessageOptions.DontRequireReceiver);
            }
        }
Aqui declaro que con tan solo un golpe se destruya el enemigo ya que esta IA la utilizare para alimañas(Enemigos de un punto de vida) 
        if(distance<=4){
        if(Input.GetKeyDown(KeyCode.Mouse0))
        {
     Debug.Log("Hello");
     Destroy (gameObject);
     
 }
 }
    } 
Link: https://www.mediafire.com/?ra71qp1d74pp972

02 Creando el controller y la camara

En primer lugar vamos a descargar un paquete de esta pagina:
http://ebookee.org/MMO-RPG-Camera-Controller-V1-1-Unity3D_2298678.html
El paquete contiene un prefab al que deveriamos añadir los siguientes scripts:
  • Character Motor
  • Third Person Controller
Si no teneis esos scripts deverias descargar el paquete de Characters Controllers.
Cuando añadamos los scripts antes mencionados deveria quedar asi:
Y con eso deveria quedar perfectamente.
Las caracteristicas de este paquete son varias, pero la que destaca es la camara que es identica a la empleada en juegos mmorpgs como el World of Warcraft.

Aviso: No he programado este codigo solo lo utilizo en mi proyecto y lo edito, no soy responsable del uso de este codigo. Gracias a Tactools.por subirlo gratuitamente.

Cualquier duda comentar.

Donde conseguir modelos gratuitos para unity

Uno de los problemas que he tenido y tengo a la hora de crear mi propio videojuego es el encontrar modelos o models para mi proyecto que esten texturizados, y si tengo suerte igual hasta con animaciones.
Por eso os voy a dejar el enlace de algunas paginas donde encontrareis muchos modelos y con gran variedad de categorias.

Blend Swap: Gran cantidad de modelos de todos los tipos con y sin animaciones la mayoria con texturas.
Bastantes categorias como por ejemplo arquitectura, personajes, animales, paisajes etc. Solo se suben models con la extension .blend por lo que tendran que tener Blender instalado pero se lo recomiendo.
http://www.blendswap.com/

The Free 3d Models - TF3DM: Muchisimos models todos con texturas pero muy pocos con animaciones, hay gran variedad y muchas categorias pero si lo que buscan son personajes con rig no se lo recomiendo.
http://www.tf3dm.com/

Personalmente no recomiendo Turbosquid ya que es mas comercial y todos los models buenos son de pago pero como en todo hay excepciones. Una cosa buena de esta pagina es la cantidad de extensiones de archivos que podemos encontrar.
www.turbosquid.com/

01 Primeros pasos con Unity3D - Terrains

Lo primero que hay que hacer en un proyecto nuevo es como no, crear un terreno y para eso yo he utilizado la herramienta que trae por defecto Unity. Cuando los graficos se configuran y se ponen al maximo y con una buena resolucion no estan nada mal pero falta una cosa, las sombras, dado que no estoy utilizando la version pro no tengo la opcion de sombras a tiempo real por eso utilizo el paquete de proyectores que trae unity.

Si no tienes el paquete en tu proyecto ve a "Editar>Import new package>Proyectors" yo solo utilizo uno que hace de sombra y se lo implemento a los objetos del terrain. Se puede implementar igualmente en los prefabs de arboles que trae unity y conseguir que todos los arboles de nuestro terrain tengan una sombra, dependiendo de su anchura y altura se vera mejor o peor.

En caso de las casas y demas objetos se les pueden implementar igualmente pero hay que tener en cuenta donde señalan las demas sombras y hacia que lado esta puesto el Directional Light, puede ser un trabajo mas que duro, largo ya que si ya tenemos creado el terrain es bastante pesado tener que agregarle sombras a todo y por eso les doy un consejo, que es editar los prefabs de los arboles y objetos que utilicen masivamente como casas NPCs y por ejemplo nubes antes de empezar a editar un terrain.

Aqui un ejemplo de como quedaria un terrain bastante simple con sombras en las montañas y en las palmeras: