NGBA - Animal Defenders II

Programación Orientada a Objetos (Tower defense - kingdom rush)

Moderator: julianmartinez16

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Tue Aug 28, 2018 10:55 pm

Post de semana 6
¿Qué hemos hecho?
  • Se terminaron las animaciones q se usarán in-game del boss
  • Se texturizó(provisionalmente en algunas partes) el boss
Animaciones, texturas

Image


Image

Image


¿Qué vamos a hacer?

Se programará el sistema de pocisionamiento de torres, se creará el banco de sonidos que se necesiten

¿Qué dificultades hemos tenido?

por el momento Hay una dificultad grave: las primeras 3 semanas de publicacion de evidencias, el proceso se estaba realizando semanalmente, esto provocó que hubieran 3 posts menos en las evidencias, igualmente aquellos posts tienen los avances trabajados a lo largo de sus respectivas semanas.
Last edited by checholiolinares on Wed Aug 29, 2018 6:49 pm, edited 1 time in total.
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
fellurchin
Posts: 10
Joined: Thu Jul 26, 2018 6:30 am

Re: NGBA - Animal Defenders II

Post by fellurchin » Wed Aug 29, 2018 6:08 pm

¿Que hemos hecho?

Se reunieron los sonidos que se van a usar en el juego

Image

También se hicieron algunas pruebas y se hizo una clase especializada para cambiar el pitch de los sonidos/música según se necesite en el momento:

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CambiarPitch : MonoBehaviour {

    AudioSource sonido;
    private float original;

	// Use this for initialization
	void Start () {
        sonido = GetComponent<AudioSource>();
        original = sonido.pitch; //en caso de necesitar el pitch original se guarda como variable
    }
	
	public void RandomPitch() //se cambia el pitch aleatoriamente en un rango pequeño
    {
        sonido.pitch = Random.Range(0.95f, 1.05f);
    }

    public void Cambiar(float nuevo) //se cambia el pitch al valor que se necesite
    {
        sonido.pitch = nuevo;
    }

    public void Restablecer() //cambia el pitch a su valor original
    {
        sonido.pitch = original;
    }
}
¿Que vamos a hacer?

Terminar el comportamiento de Bullet y empezar a crear el menú principal

¿Que problemas hemos tenido?

Hubo unos problemas con la programación de un raycast, se va a solucionar en cuanto se pueda.
También se borró un sistema de partículas por error al actualizar entre versiones del juego. Ya esta solucionado
"Si te he fallado te pido perdón de la única forma que es, abriendo las puertas de mi corazon para cuando decidas volver. Yo solo quiero tu amistad." -Albert Einstein
----
Jose Luis Victoria V.
Programacion y diseño orientado a objetos

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Wed Aug 29, 2018 6:48 pm

¿Que hemos hecho?
  • Se modificaron scripts para hacer posible la compra y posicionamiento de objetos.
producto torre

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu()]
public class ProductoTorre : Producto {

    //parametros que se pasan a la hora de crear la torre jugable
    public int vida;
    public float danno;
}
producto trampa

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu()]
public class ProductoTrampa : Producto
{
    public float Danno;
    public float Delay;
}
Modificaciones

Articulo

Code: Select all

using UnityEngine;
using UnityEngine.UI;

public class Articulo: MonoBehaviour
{
    public Producto producto; //Asset de producto correspondiente a este articulo
    Text precio; //texto que mostrará el precio
    Text Descripcion; //texto que mostrará la descrpcion
    Image Preview; //preview del objeto que se va a comprar
    public Sprite[] posiblesPreviews; //0 = "TorreGenerica", 1 = "TorreV", 2 = "TrampaGenerica", 3 = "TrampaV" 
    MainProps props;

    private void OnEnable() // aqui se suscriben metodos de este escript para ser manejados en la UI
    {
        UiEventHandler.Compra += Comprar;
    }

    private void OnDisable()
    {
        UiEventHandler.Compra -= Comprar;
    }

    private void Start()
    {
       props = GameObject.Find("Main").GetComponent<MainProps>();
    }
    //se obtienen los componentes necesarios 
    private void Update()
    {
        Preview = Buscar("Preview").GetComponent<Image>();
        precio = Buscar("Precio").GetComponent<Text>();
        precio.text = " $ " + producto.precio.ToString();
        Descripcion = Buscar("Descripcion").GetComponent<Text>();
        Descripcion.text = producto.Descripcion;       
    }

    //funcion para buscar un GameObject especifico dentro de los hijos
    GameObject Buscar(string nombre)
    {
        GameObject retorno = null;

        foreach (Transform t in transform)
        {
            if (t.name == nombre)
                retorno = t.gameObject;
        }
        return retorno;
    }


    //Funcion para comprar, esta se suscribe al evento comprar de la UI
    public void Comprar()
    {      
        if (props.Dinero >= producto.precio)
        {
            props.Dinero -= producto.precio;
            if (producto.name == "Torre1")
            {
                props.PosicionarComprado(0);
            }
            if (producto.name == "Torre2")
            {
                props.PosicionarComprado(1);
            }
            if (producto.name == "Trampa1")
            {
                props.PosicionarComprado(2);
            }
            if (producto.name == "Trampa2")
            {
                props.PosicionarComprado(3);
            }
        }       
    }

    public void SetSpritePreview()
    {
        switch (producto.name)
        {
            case "Torre1 (ProductoTorre)":
                Preview.sprite = posiblesPreviews[0];
                break;
            case "Torre2 (ProductoTorre)":
                Preview.sprite = posiblesPreviews[1];
                break;
            case "Trampa1 (ProductoTrampa)":
                Preview.sprite = posiblesPreviews[2];
                break;
            case "Trampa2 (ProductoTrampa)":
                Preview.sprite = posiblesPreviews[3];
                break;
        }
    }
}
Tienda

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TiendaAsset : MonoBehaviour
{

    //clase diseñada para poder re escalar con productos nuevos
    public List<Producto> productos; //lista de productos (agregados previamente)
    List<GameObject> articulos; //articulos graficos(botones)
    public GameObject plantilla; //prefab del grafico articulo con todo vacio
    MainProps propiedadesMain; //propiedades "static" de la escena
    

    private void Start()
    {
        articulos = new List<GameObject>(); //se crea una nueva lista sin asignarse
        for (int i = 0; i < productos.Count; i++)
        {
            articulos.Add(Instantiate(plantilla,transform)); //para el numero de productos asignados previamente en el editor se añaden al campo de la tienda plantillas vacias de articulos
        }
        for (int i = 0; i < articulos.Count; i++)
        {
            articulos[i].GetComponent<Articulo>().producto = productos[i]; //a cada articulo se le asigna uno de los productos previamente asignados
            articulos[i].GetComponent<Articulo>().SetSpritePreview(); //se pone el sprite en correspondiente al producto que le tocó al articulo en cuestion
        }
    }
}
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Tue Sep 04, 2018 4:58 am

¿Qué hemos hecho?
  • Se empezaron a crear assets pequeños para el escenario
  • Se empezaron animaciones de transición del enemigo(entrada y muerte)
Plataforma donde se ubican las torres

Image

¿Qué vamos a hacer?

Ajustar animaciones, iniciar la recta final para una primera build (armar el escenario,corregir errores, probar el juego), se espera alcanzar la primera build para la siguiente semana

¿Qué dificultades hemos tenido?

por el momento no se ha podido avanzar con la intensidad deseada en el proyecto debido a otros proyectos y obligaciones
Last edited by checholiolinares on Tue Sep 04, 2018 6:26 am, edited 1 time in total.
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Tue Sep 04, 2018 6:14 am

IMPORTANTE AVISO

debido a confusión los primeros 3 posts fueron realizados semanalmente, por lo tanto hay 3 posts menos de los que debería haber
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Wed Sep 05, 2018 10:02 pm

¿Qué hemos hecho?
  • Diagramas de clases de los scripts ya implementados y probados
  • Comportamiento de la trampa
Diagramas

Image

Image

Image

Imageurl]

Trampa(falta hacer daño de enemigos y diagrama)

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DannoTrampa : MonoBehaviour {

    private float danno;
    private float activacion;
    private GameObject explosion;
    private string tipo; //pasar propiedad de producto
    bool explotar = false;

	// Use this for initialization
	void Start () {
        explosion = GameObject.Find("Explosion prefab");
        switch (tipo)
        {
            case "vida":
                {
                    danno = 100f;
                }
                break;
            case "velocidad":
                {
                    danno = 60f; //porcentaje
                }
                break;
        }
        activacion = 10f;
	}
	
	// Update is called once per frame
	void FixedUpdate () {
        if (explotar == true)
        {
            explosion.transform.localScale += Vector3.one * Time.deltaTime * 5;
            if (explosion.transform.localScale.x >= 50f)
            {
                Destroy(explosion.gameObject);
                Destroy(gameObject);
                explotar = false;
            }
        }
	}

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Enemigo"))
        {
            Invoke("Explotar", 2f);
        }
    }

    private void Explotar()
    {
        transform.GetChild(1).GetComponent<SkinnedMeshRenderer>().enabled = false;
        //cosas raras con listas
        explosion = Instantiate(explosion, transform.position, Quaternion.identity);
        explotar = true;
        
        //cuando acabe de explotar se destruye
    }
}
¿Qué vamos a hacer?

Terminar de pulir el escenario e implementar las mecanicas (zonas donde es posible poner torres, area de accion del zorro, caminos de los enemigos) en el nuevo entorno

¿Qué dificultades hemos tenido?
  • Hasta el momento se han presentado problemas de tiempo
  • Reiteramos en el problema que surgió: los tres primeros posts se realizaron semanalmente
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Mon Sep 10, 2018 11:52 pm

¿Qué hemos hecho?
  • Se empezaron a pulir los comportamientos de los enemigos y torres(correccion de errores)
  • Se empezaron a implementar los assets y cuadrar los estados de animacion del robot
  • Se modeló lo que será el terreno
  • Se realizó un ajuste en el script de la torre para ser posicionada solo en áreas especificas
  • Se empezó a escribir el script de pooling de enemigos
Terreno

Image

Ajuste de la torre

Code: Select all

GameObject.Find("Main").GetComponent<MainProps>().ObjSeleccionado = this.gameObject;
                    if (Physics.Raycast(r, out hit))
                    {
                        if (hit.collider.gameObject.tag == "Posicionable")
                        {
                            transform.position = hit.collider.gameObject.transform.position;
                        }
                    }
Pool (Aún no terminado)

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnerEnemigos : MonoBehaviour {

    public GameObject[] tiposDisponibles;
    public int numeroOleadas;
    public int[] enemigosPorOleada;
    public float tiempoPorOleada;
    int oleadaActal;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        if (oleadaActal <= numeroOleadas)
        {
            Spawnear();
        }
	}

    public IEnumerator Spawnear()
    {
        for (int i = 0; i < enemigosPorOleada[oleadaActal]; i++)
        {
            Instantiate(tiposDisponibles[Random.Range(0, tiposDisponibles.Length - 1)], transform.position, Quaternion.identity);
        }
        yield return new WaitForSeconds(tiempoPorOleada);
        oleadaActal++;
    }
}
¿Qué vamos a hacer?
  • Terminar el escenario
  • Terminar de integrar los assets graficos
  • Armar un nivel
  • Sistemas de particulas(si hay tiempo)
¿Qué dificultades hemos tenido?
  • Recordamos que los 3 primeros posts fueron realizados semanalmente
  • Por problemas de rendimiento en nuestros comptadores hay retrasos en la creacion del escenario
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
fellurchin
Posts: 10
Joined: Thu Jul 26, 2018 6:30 am

Re: NGBA - Animal Defenders II

Post by fellurchin » Wed Sep 12, 2018 11:42 pm

¿Qué hemos hecho?

- Se implementaron los sprites de botones en algunas partes del UI y se organizo el espacio de este.
- Se creo un panel de información desplegable y contraible al presionar un botón por medio de código.

Image

Panel oculto
Image

Panel al presionar el botón
Image

Codigo del panel

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PanelInfo : MonoBehaviour {

    //Este codigo puede rehusarse para ocultar otras partes del UI si se ve que ocupa mucha informacion en pantalla.
    RectTransform rect;
    public int estado;
    
    // Use this for initialization
    void Start () {
        rect = GetComponent<RectTransform>();
        estado = 1;
	}
	
	// Update is called once per frame
	void FixedUpdate () {
        Comportamiento(estado);
	}

    public void CambiarEstado()
    {
        if (estado == 0) { }
        else if(estado == 1)
        {
            estado = 2;
        }
        else
        {
            estado = 1;
        }
    }

    public void Comportamiento(int casos)
    {
        switch (casos)
        {
            case 0:
                {
                    //ocultar el panel "Informacion" completamente, cuando se quiera ocultar del UI
                    rect.anchoredPosition = new Vector2(250f, 0f);
                }
                break;
            case 1:
                {
                    //ocultar el panel "Informacion" dejando unicamente el boton al descubierto
                    rect.anchoredPosition = new Vector2(200f, 0f);
                }
                break;
            case 2:
                {
                    //muestra el panel "Informacion" en pantalla       
                    rect.anchoredPosition = new Vector2(0f,0f);
                }
                break;
        }
    }
}
Se había hecho otro código para mandar una señal que cambiara el estado desde el botón pero luego se vio innecesaria y se borró.

¿Qué vamos a hacer?

-Vamos a terminar el diagrama de clases y perfeccionarlo luego de la reunion con el monitor.
-Vamos a pulir detalles en el HUD y crear el main menu del juego.

¿Qué problemas hemos tenido?

Por problemas de salud he tenido muy poco tiempo para trabajar, se pudo haber hecho más.
Se decidió trabajar en la UI en vez del escenario.
Recordamos que los 3 primeros posts fueron realizados semanalmente.
"Si te he fallado te pido perdón de la única forma que es, abriendo las puertas de mi corazon para cuando decidas volver. Yo solo quiero tu amistad." -Albert Einstein
----
Jose Luis Victoria V.
Programacion y diseño orientado a objetos

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Thu Sep 13, 2018 6:09 am

Link al diagrama de clases (aún no terminado)

https://www.lucidchart.com/invitations/ ... 42d7b8050e
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

User avatar
checholiolinares
Posts: 26
Joined: Thu Jul 26, 2018 6:24 am

Re: NGBA - Animal Defenders II

Post by checholiolinares » Mon Sep 17, 2018 11:15 pm

¿Qué hemos hecho?
  • Se realizaron algunas correcciones hechas por el monitor
  • Se cambió el comportamiento de las torres
  • Se creó el script "Proyectil" y se agregó su comportamiento a las torres
  • Se creó la clase base que por el momento se encuentra vacia
Correciones hechas
  • Unir las clases "Torre" y "AtaqueTorre"
  • Organizar los metodos de compra y ponerlos en la clase adecuada (TiendaAsset)
  • Implementar un "GameManager" utilizando un tipo d ediseño llamado "Singleton"
  • Serializar las propiedades que se estaban usando como publicas
Proyectil persiguiendo a un enemigo
Image

¿Qué vamos a hacer?

Vamos a terminar el diagrama de clases ya con los scripts que hemos hecho, implementaremos el menú principal y los estados de ganar o perder el juego, se implementará un nivel provisional

¿Qué dificultades hemos tenido?
  • Aún no se ha podido implementar el nivel, pues ha habido problemas con los computadores de los que disponemos
  • Reiteramos en le problema de los 3 primeros posts que se realizaron semanalmente
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

Post Reply