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 » Wed Sep 19, 2018 10:33 pm

¿Qué hemos hecho?
  • Se ha refinado más el diseño del código
  • Se implementó una interfaz para el comportamiento de selección
  • Se esculpió el terreno y se diseño la funcionalidad del escenario (el anterior fue descartado)
Interfaz

Image

Terreno

Image

¿Qué vamos a hacer?
  • Se decorará el escenario con props
  • Se terminará de programar el manejo de nivel (victoria, derrota)
  • Continuaremos implementando los assets gráficos (animaciones y modelos)
  • Se implementará la primera versión del nivel
¿Qué problemas hemos tenido?
  • Reiteramos en el problema anterior: los 3 primeros posts se realizaron semanalmente
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 » Mon Sep 24, 2018 8:46 pm

¿Qué hemos hecho?

Se solucionaron unos problemas con el comportamiento de los enemigos.
Se creó la presentación para la pre entrega y se hizo el diagrama de clases del juego.

Diagrama de clases

https://drive.google.com/file/d/0B_51-2 ... sp=sharing

¿Qué vamos a hacer?

Crear de nuevo unos scripts que estaban hechos para este avance pero se borraron por unos problemas de unity.

¿Qué problemas hemos tenido?

Por culpa de un error de unity con el collab se perdieron varios scripts y elementos que no habían sido todavía montados al github sin que nos dieramos cuenta.
Detalles del problema
https://forum.unity.com/threads/collab- ... ry.423991/
Se repondrá lo que faltaba lo antes posible pero no es algo muy grave.
"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 » Tue Sep 25, 2018 6:10 am

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 Oct 01, 2018 9:45 pm

¿Qué hemos hecho?

Estos dias despues de la pre entrega no se realizó trabajo significativo :c

¿Qué vamos a hacer?
  • Pulir el comportamiento de los robots
  • Pulir el comportamiento del pool de enemigos
  • Modelar las rocas que serán apoyo de las torres
  • Repetir el modelo de la base
¿Qué problemas hemos tenido?

Por el momento el tiempo es el principal problema
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 Oct 03, 2018 10:17 pm

¿Que hemos hecho?

Se realizaron modelos de rocas para el escenario

Image

¿Que vamos a hacer?

terminar el resto de actividades propuestas para el sprint de esta semana

¿Qué dificultades hemos tenido?

Se han presentado dificultades de tiempo esta semana pues otras materias coincidieron en entregas
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 Oct 08, 2018 3:52 pm

¿Qué hemos hecho?
  • Modelos de aliados mejorados
    Image
  • Modelo de nueva torre creado
¿Qué vamos a hacer?

EL collab presentó un daño irreversible asi que se utilizará un backup
  • Jose:
    • Rehacer los elementos UI y funcionamiento
    • Escenario en world machine
  • Sergio:
    • Crear las demas fases de comportamiento de bullet
    • mejorar los efectos visuales de rayos
    • Implementar la trampa
    • EMpezar a trabajar en el boss
¿Qué dificultades hemos tenido?
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 Oct 10, 2018 9:16 pm

¿Qué hemos hecho?

Se implementó un texturizado procedural para el terreno además de q se le hicieron modificaciones

Image

Image

Image

¿Qué vamos a hacer?

Continuar con el trabajo propuesto el martes

¿Qué dificultades hemos tenido?

Compartir los abances ahora es mas complicado debido a que el collab ya no funciona, el tiempo es otro problema
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 Oct 16, 2018 12:02 am

¿Qué hemos hecho?
  • Empezar a adecuar el proyecto para que sea mas agil trabajar en equipo
  • Pulir el comportamiento de los robots
  • Pulir el comportamiento de los spawners
¿Qué vamos a hacer?
  • Pulir el comportamiento de bullet
  • Añadir elementos significadores en la interacción de usuario
¿Qué problemas hemos tenido?

Compartir el proyecto y actualizarlo se vuelve cada vez mas tedioso por conflictos con archivos
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 Oct 17, 2018 6:52 pm

¿Qué hemos hecho?

Volvimos a hacer el código de la barra de vida y el efecto visual que lo acompaña(una barra extra que se vacía lentamente cuando el jugador recibe daño) y creamos un prototipo de los sprites que se van a usar para dicha barra.

Código de la barra de vida

Code: Select all

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

namespace Assets.Scripts
{
    class ControladorBarraVida : MonoBehaviour
    {
        Slider vida;
        Slider retraso;       

        private void Start()
        {                        
            vida = GameObject.Find("SliderVida").GetComponent<Slider>();
            retraso = GameObject.Find("SliderVidaRetraso").GetComponent<Slider>();
        }

        private void FixedUpdate()
        {
            vida.value = ManagerJuego.instancia.BaseVida;
            BajarRetraso();
        }

        public void BajarRetraso()
        {
            if (retraso.value < vida.value)
            {
                retraso.value = vida.value;
            }
            else if (retraso.value > vida.value)
            {
                retraso.value -= 0.01f;
            }
        }
    }
}
Image

El sprite esta hecho de tal forma que solo se necesite cambiar el color dentro de unity y tenga un espacio transparente para ver la barra oculta que baja progresivamente.

¿Qué vamos a hacer?

Vamos a terminar de pulir el juego y la interfaz gráfica para la entrega

¿Qué problemas hemos tenido?

Hemos tenido problemas con el repositorio pero ya lo estamos solucionando. Ademas, personalmente no podre trabajar todo lo que me gustaría por el evento de Colombia 4.0 la próxima semana.
"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 » Mon Oct 29, 2018 10:05 pm

¿Qué hemos hecho?
  • Se ha re escrito el codigo que se perdió con los problemas de unity
  • Se Remodelaron las torres
  • Se reconfiguró el comportamiento del personaje principal para hacerlo mas interactivo
  • Se creó el panel de información
  • Se implementó el menú de inicio
  • Se implementó una pantalla de carga
  • Se mejoró el script del proyectil
https://youtu.be/gPDMSZde6lI

Code: Select all

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

public class InfoSeleccion : MonoBehaviour {
    [SerializeField] private Sprite muestra;
    [SerializeField] private string nombre;
    [SerializeField] private Transform posCam;
    [SerializeField] private Transform direccionCam;
    private float vida;
    private string info;


    // Use this for initialization
    void Start () {
        
    }
	
	// Update is called once per frame
	void Update () {
		
	}

    public float Vida
    {
        get { return vida; }
        set { vida = value; }
    }

    public string Info
    {
        get
        {
            info = "Nombre:" + '\n' + nombre + '\n';
            if (vida != 0)
            {
                info += "Vida:" + '\n' + vida;
            }
            return info;
        }

        set
        {
            info = value;
        }
    }

    public Sprite Muestra
    {
        get
        {
            return muestra;
        }

        set
        {
            muestra = value;
        }
    }

    public Transform PosCam
    {
        get
        {
            return posCam;
        }

        set
        {
            posCam = value;
        }
    }

    public Transform DireccionCam
    {
        get
        {
            return direccionCam;
        }

        set
        {
            direccionCam = value;
        }
    }
}

Code: Select all

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

public class InfoPanel : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler {

    private Animation anim;
    private Text info;
    private RawImage muestra;

    // Use this for initialization
    void Start () {
        anim = GetComponent<Animation>();
        info = GetComponentInChildren<Text>();
        muestra = transform.Find("MuestraInfo").GetComponent<RawImage>();
        Llenar();
    }
	
	// Update is called once per frame
	void Update () {
        Llenar();
	}

    public void OnPointerEnter(PointerEventData pointer)
    {
        anim["PAnel Información Salto"].speed = 1;
        anim.Play("PAnel Información Salto");
    }
    public void OnPointerExit(PointerEventData pointer)
    {
        anim["PAnel Información Salto"].speed = -1;
        anim.Play("PAnel Información Salto");
    }

    public void Llenar()
    {
        try
        {
            InfoSeleccion infoSeleccion = ManagerJuego.instancia.ObjSeleccionado.GetComponent<InfoSeleccion>();
            this.info.text = infoSeleccion.Info;
            if (infoSeleccion.Muestra != null)
            {
                muestra.texture = infoSeleccion.Muestra.texture;
            }
            else
            {
                ManagerJuego.instancia.CamaraMuestras.transform.position = infoSeleccion.PosCam.position;
                ManagerJuego.instancia.CamaraMuestras.transform.LookAt(infoSeleccion.DireccionCam, Vector3.up);
                muestra.texture = ManagerJuego.instancia.CamaraMuestras.targetTexture;
            }
        }
        catch (NullReferenceException error)
        {
            return;
        }
    }

    public void UbicarCamaraMuestras()
    {
        
    }
}

Code: Select all

case 1:// Manejable
                {
                    
                    //proyectil.Disparado = false;
                    rayo = Camera.main.ScreenPointToRay(Input.mousePosition); //se dispara un rayo desde la posicion del mouse
                    if (ManagerJuego.instancia.ObjSeleccionado == this.gameObject)
                    {                       
                        if (Input.GetButtonDown("Fire1") ) //
                        {
                            if (Physics.Raycast(rayo, out hit)) //se castea un rayo desde la posicion con un click y se guarda la informacion de colision en el hit
                            {
                                if (hit.collider.gameObject.CompareTag("Caminable")) //si el rayo golpea un objeto en el que se pueda navegaar
                                {
                                    if (GameObject.FindWithTag("Objetivo") == null) // y si no existe un objetivo
                                        Instantiate(prefabObj, hit.point, Quaternion.identity); // se crea un objetivo en el pundo donde se clickeó
                                    else// si existe un objetivo
                                        GameObject.FindWithTag("Objetivo").transform.position = hit.point;// se repocisiona

                                }
                                if (hit.collider.gameObject.CompareTag("Objetivo"))//Cancelación de navegación
                                {
                                    Destroy(hit.collider.gameObject);
                                }
                            }
                        }
                    }

                    if (GameObject.FindWithTag("Objetivo") != null) // si el objetivo existe...
                    {
                        agent.destination = GameObject.FindWithTag("Objetivo").transform.position; //el destino del navmesh agent será el objetivo
                        if (Vector3.Distance(transform.position, agent.destination) <= 2f) //si el zorro se encuentra a 2 unidades o menos del objetivo...
                            Destroy(GameObject.FindWithTag("Objetivo")); //se destruye el objetivo
                    }
                    else
                        agent.destination = transform.position; // en caso de que no exista objetivo el destino es su propia posicion

                    anim.SetFloat("Velocidad", agent.velocity.magnitude); // control de animación

                    
                }
                break;

            case 2://Disparando
                {
                    rayoRot = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hitRot = new RaycastHit();
                    if (Physics.Raycast(rayoRot, out hitRot))
                    {
                        Vector3 direccion = new Vector3(hitRot.point.x - transform.position.x, transform.position.y, hitRot.point.x - transform.position.x);
                        transform.forward = direccion;
                    }
                        if (Input.GetMouseButtonDown(0))
                    {
                        rayo = Camera.main.ScreenPointToRay(Input.mousePosition);
                        if (Physics.Raycast(rayo, out hit))
                        {
                            Vector3 direccion = new Vector3(hit.point.x - transform.position.x, transform.position.y, hit.point.x - transform.position.x);
                            transform.forward = direccion;
                            if (hit.collider.gameObject.CompareTag("Enemigo"))
                            {
                                anim.SetTrigger("Shoot");
                                Disparar();
                            }
                        }
                    }
                }
                break;
¿Qué vamos a hacer?
  • Mejorar los errores de posicionamiento de los laseres de los robots
  • Programar el comportamiento de los robots para que no se queden en un solo punto
  • Rediseñar el pool de enemigos
  • Hacer pruebas de jugabilidad
¿Qué dificultades hemos tenido?
  • Debido a un error con github se borró el repositorio y se perdió una version del proyecto junto con su backup mas nuevo, afortunadamente existía un backup del sprint inmediatamente anterior en google drive
Sergio Felipe Pañaloza Herrera
Programación y diseño orientado a objetos

Image

Post Reply