Estudios Ox - Gods vs Titans

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

Moderator: julianmartinez16

User avatar
Juliana Rojas
Posts: 24
Joined: Tue Jul 18, 2017 4:11 pm

Re: Estudios Ox - Gods vs Titans

Post by Juliana Rojas » Tue Oct 03, 2017 9:38 pm

Semana 12

Preguntas:

¿Que hemos hecho?
*Selección de la paleta de colores para el nivel
*Mejora del diseño del nivel
*Adaptar el diseño de las torres y los enemigos al juego
*Inicio de la programación tras encontrar el problema que impedía dicho proceso (¡HURRA!)
*Videos del inicio del proceso

¿Que vamos a hacer?
*Comentar y publicar todo el código usado.
*Avanzar con la programación.
*Hacer unas ultimas revisiones para la pre entrega siendo esta el día jueves.

¿Que dificultades hemos tenido?
La dificultad que no nos permitía usar unity fue finalmente resuelta y ya estamos en marcha.

Evidencia

Selección de la paleta de colores para el mapa
Image

Mejora del diseño del mapa
Image

Programación
Movimiento del enemigo no fluido



Codigo comentado con la utilidad de cada linea

Code: Select all

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

public class Unidad : MonoBehaviour {

	//Tres miembros dato
	public GameObject ruta; //Servir para guardar la ruta
	private int indice;  //Avanzar entre las diferentes coordenadas de la ruta
	private float tiempo; //Para que el movimiento planeado de una coordenada a otra ocurra en el tiempo requerido

	//Funcion update de la unidad se va a definir
	// Update is called once per frame
	void Update () {
		
		if(tiempo > 0.5)  //Control de tiempo que me va a ejecutar cada 0.5 unidades de tiempo en unity
		{
			if(indice < ruta.transform.childCount) //Coordenadas dentro de la ruta son menores que la cantidad de puntos en la ruta. Es una opcion dinamica, si se añade un nuevo elemento a la ruta, se actualiza
			{
				Debug.Log(ruta.transform.GetChild(indice).transform.position.x + " " + ruta.transform.GetChild(indice).transform.position.y); //Ir probando cada una de las coordenadas
				this.transform.position = new Vector3(ruta.transform.GetChild(indice).transform.position.x, ruta.transform.GetChild(indice).transform.position.y, this.transform.position.z); //Extrae la posicion en x, en y y en z, y luego le asigna otra vez la posicion
				indice++; //Le incremento el indice. Si llego al final no puede pedir mas coordenadas
			}
			tiempo = 0; //Cada cuanto se va a ejecutar el anterior bloque
		}
		else //Si por otro lado
		{
			tiempo += Time.deltaTime; //Todavia no se ha cumplido el tiempo se incrementa de esta forma o si no se reinicia 
		}
		
	}
}
Movimiento fluido del enemigo



Codigo comentado con la utilidad de cada linea

Code: Select all

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

public class Unidad1 : MonoBehaviour {

    //Miembro dato publico
    public GameObject ruta; //ruta: conjunto de puntos que pintamos en el escenario
    private int indice; //Se utiliza para ir navegando entre los puntos de esa ruta
    private Vector3 posicion_siguiente; //A la cual la unidad se puede mover
    private float vel = 1; //Las unidades tienen velocidad que va a ser de uno
    private float distancia_punto = 0.5f; //Distancia al proximo punto

	// Use this for initialization
	void Start () {
        posicion_siguiente = ruta.transform.GetChild(0).position; //parar al personaje (a la unidad) en el primer punto.
	}
	
	// Update is called once per frame
	void Update () {
        Vector3 dir = posicion_siguiente - this.transform.position; //Calcular la direccion entre la posicion siguiente y la posicion actual que esta en tranform.position
        this.transform.position += dir * vel * Time.deltaTime; //Mover el personaje siguiendo esta direccion lo multiplicamos por la velocidad y cada vez que Unity ejecuta el Update se incrementa el tiempo por eso se multiplica por Time.deltatime para que pueda avanzar

        //Para poder saber cuando saltar de un punto a otro al proximo punto lo calculamos con la magnitud de la direccion probando si es menor o igual a la distancia del punto
        //Si eso pasa quiere decir que la unidad llego al punto y entonces va a pedir un nuevo punto
        if(dir.magnitude <= distancia_punto)
        {
            //Como pide el nuevo punto. Cuantos elementos como hijos tenemos en esa ruta
            if(indice+1 < ruta.transform.childCount)
            {
                indice++; //se incrementa la ruta
                posicion_siguiente = ruta.transform.GetChild(indice).position; //Le asigno como posicion siguiente de la ruta obtengo el transform y el get child en la posicion indice y de ahi obtengo el transform
                Debug.Log("xs" + posicion_siguiente.x + "ys" + posicion_siguiente.y); //Debug para ir mirando cual es la posicion x siguiente y la posicion y siguiente
            }
        }

		
	}
}
Seguimiento del enemigo por la torre

Codigo comentado con la utilidad de cada linea

Code: Select all

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

public class Torre : MonoBehaviour {

    public GameObject enemigo; //Enemigo publico para probarlo
    private float distancia_umbral = 2; //Rango de alcance. Miembro dato se puede cambiar

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		float dist = (enemigo.transform.position - this.transform.position).magnitude; //Distancia del enemigo para calcular cuando esta dentro del rango. Esto da un vector 3

        //Si la distancia es menor o igual a la distancia de umbral
        if(dist <=distancia_umbral)
        {
            //voy a pintar una linea en el modo de prueba que va desde...la posicion al enemigo y la linea sera de color verde
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.green);
        }

	}
}

User avatar
Juliana Rojas
Posts: 24
Joined: Tue Jul 18, 2017 4:11 pm

Re: Estudios Ox - Gods vs Titans

Post by Juliana Rojas » Thu Oct 05, 2017 6:50 am

Semana 12

Preguntas:

¿Que hemos hecho?

*Programación del movimiento de los enemigos.
*Programación mas fluida del movimiento.
*Seguimiento de las torres.
*Pooling de la Esfinge
*Disparo de la Torre Zeus
*Implementacion gráfica de la barra de vida
*Diseño del menú de selección de Torres

¿Que vamos a hacer?
*Programación de la animación del movimiento de los enemigos.
*Programación de la animación del ataque de las torres.
*Implementar las opciones para seleccionar torres por medio del cartel.
*Muerte de los enemigos.

¿Que dificultades hemos tenido?
No sabemos como mejorar el aspecto visual del ataque de Zeus, sin embargo, estamos buscando soluciones.

Evidencias

Diseño del menú de selección de Torres

Image
Cada elemento representa a un Dios, ademas son el arma que cada estatua lleva en la mano: La flor le pertenece a Hera, El rayo a Zeus, El tridente es de Poseidon y El martillo de Hefesto.

Construcción de Torres


Code: Select all

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

public class LogicaPonerTorre : MonoBehaviour {

    public GameObject torre; //Lo que se quiere es duplicar las torres cuando se de click por tanto se aclara un GameObject

    void OnMouseDown()
    {
        //Debug.Log("Test"); //Cada que se le da click al elemento aparecera en Console Test para ver que funcione

        GameObject temp; //Gameobject temporal
        Vector3 pos = this.transform.position; //Guardar cada vez que se le da click la posicion que tiene en este caso el cartel
        pos.y = pos.y + .1f;//se creo la posicion en una variable para correr la torre. Se ajusta en y para que aparezca sobre el terreno de construccion
        temp = Instantiate(torre); //Llamar a la funcion instantiate que lo que recibe es una referencia de un GameObject que quiero crear. Lo hace apartir de un elemento que ya esta creado
        temp.transform.position = pos; //Poner el elemento (el transform position) a esa posicion que tenia ahi guardada (pos)
        temp.layer = 2; //Cambiar la profundidad ¿Como hacer que tenga el valor de layer del cartel del cual es convocada la torre?)
        Destroy(this.gameObject); //Destruir el cartel
        //Volver al #4 para hacer la programacion de la seleccion de torres 

    }
}
Pooling con mas instancias de la Esfinge



Code: Select all

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

public class PoolingUnidades : MonoBehaviour {

    public static ArrayList unidades = new ArrayList(); //Crear e inicializar. ArrayList es similar a un vector pero en estos no especifico cuantos componentes voy a tener. Estructura que crece dinamicamente

    // Use this for initialization
	void Start () {
        GameObject unidad = GameObject.Find("Esfinge"); //buscar la unidad con un nombre especifico
        GameObject temp; //GameObject temporal
        Vector3 incremento = new Vector3(0, 1); //crear un nuevo vector
        Vector3 posicion_actual = unidad.transform.position; //guardar la posicion inicial
        for (int i = 0; i < 10; i++) //Variando el numero creo las unidades que necesito
        {
            temp = (GameObject)Instantiate(unidad, posicion_actual + incremento, Quaternion.identity);//instanciate recibe (objeto que quiero duplicar,posicion actual donde esta mas el incremento, direccion) Se hizo un casting a gameobject al objeto
            posicion_actual = temp.transform.position; //Ahora la posicion actual va a ser igual a...
            unidades.Add(temp); //guardar en el arraylist de unidades por medio de la funcion Add
        }
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

Code: Select all

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

public class Unidad1 : MonoBehaviour {

    //Miembro dato publico
    public GameObject ruta; //ruta: conjunto de puntos que pintamos en el escenario
    private int indice; //Se utiliza para ir navegando entre los puntos de esa ruta
    private Vector3 posicion_inicial;
    private Vector3 posicion_siguiente; //A la cual la unidad se puede mover
    private float vel = .5f; //Las unidades tienen velocidad que va a ser de uno
    private float distancia_punto = 0.5f; //Distancia al proximo punto
    private bool esta_viva = true; //por defecto el miembro dato booleano esta falso

    

    // Use this for initialization
    void Start () {
        posicion_inicial = this.transform.position; //posicion que tiene la unidad cuando arranca. Asignar la posicion inicial.
        posicion_siguiente = ruta.transform.GetChild(0).position; //parar al personaje (a la unidad) en el primer punto.
	}
	
	// Update is called once per frame
	void Update () {

        if(esta_viva) //Controlarnos cuando se va a mover el personaje y permitirnos ver lo siguiente
        {
            Vector3 dir = posicion_siguiente - this.transform.position; //Calcular la direccion entre la posicion siguiente y la posicion actual que esta en tranform.position
            this.transform.position += dir * vel * Time.deltaTime; //Mover el personaje siguiendo esta direccion lo multiplicamos por la velocidad y cada vez que Unity ejecuta el Update se incrementa el tiempo por eso se multiplica por Time.deltatime para que pueda avanzar

            //Para poder saber cuando saltar de un punto a otro al proximo punto lo calculamos con la magnitud de la direccion probando si es menor o igual a la distancia del punto
            //Si eso pasa quiere decir que la unidad llego al punto y entonces va a pedir un nuevo punto
            if (dir.magnitude <= distancia_punto)
            {
                //Como pide el nuevo punto. Cuantos elementos como hijos tenemos en esa ruta
                if (indice + 1 < ruta.transform.childCount)
                {
                    indice++; //se incrementa la ruta
                    posicion_siguiente = ruta.transform.GetChild(indice).position; //Le asigno como posicion siguiente de la ruta obtengo el transform y el get child en la posicion indice y de ahi obtengo el transform
                                                                                   //Debug.Log("xs" + posicion_siguiente.x + "ys" + posicion_siguiente.y); //Debug para ir mirando cual es la posicion x siguiente y la posicion y siguiente
                }
                else //cuando esta condicion sea flasa -> para volver a reutilizar el enemigo
                {
                    indice = 0; //volvemos el indice igual a cero para que vuelva a considerar los puntos de la ruta
                    this.transform.position = posicion_inicial; //La posicion de este elemento va a ser la posicion inicial.
                    posicion_siguiente = ruta.transform.GetChild(0).position; //volver a asignar la posicion siguiente como al principio
                }
            }
        }
        

		
	}


    //Crear un evento para destruir la bala cuando colisiona lo cual no se recomienda pero se utiliza para probar su funcionamiento
    void OnTriggerEnter2D(Collider2D otro)
    {
        if(otro.gameObject.tag == "bala")
        {
            Destroy(otro.gameObject);
        }
    }

    public bool Esta_viva
    {
        get
        {
            return esta_viva;
        }

        set
        {
            esta_viva = value;
        }
    }
}
Reconocimiento por parte de la Torre de las instancias creadas


Code: Select all

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

public class Torre : MonoBehaviour {


    private GameObject enemigo; //Enemigo publico para probarlo (se cambio a privado). Para que las torres solo le disparen a un enemigo
    private bool esta_activa;
    private float distancia_umbral = 1.5f; //Rango de alcance. Miembro dato se puede cambiar

    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Enemigo = BuscarEnemigoCercano(); //Enemigo le voy a asignar la respuesta de llamar a enemigo cercano
        if(Enemigo!=null)//Si Enemigo es diferente de null
        {
            Disparar(); //Cada vez que tenga un enemigo cercano dispara
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.yellow); //dibujar una linea desde este objeto hasta el enemigo de color amarilla
        }

        /*
        float dist = (enemigo.transform.position - this.transform.position).magnitude; //Distancia del enemigo para calcular cuando esta dentro del rango. Esto da un vector 3

        //Si la distancia es menor o igual a la distancia de umbral
        if(dist <=distancia_umbral)
        {
            //voy a pintar una linea en el modo de prueba que va desde...la posicion al enemigo y la linea sera de color verde
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.green);
        }
        */
	}

    //evento que se encarga de disparar. Se encarga de crear instancias de la bala
    void Disparar()
    {
        GameObject obj = (GameObject)Instantiate(GameObject.Find("bala"), this.transform.position, Quaternion.identity); //La instancia se crea en la posicion de la torre y la direccion de la torre. Se hizo un casting a GameObject
        Bala bala = obj.GetComponent<Bala>(); //Casteo a bala desde la referencia de gameobject 
        bala.ActivarBala(this); //Cada vez que se dispara la bala se va a activar. Se le va a pasar la referencia a la Torre que la disparo
    }

    //Crear el metodo que no recibe parametros
    GameObject BuscarEnemigoCercano()
    {
        ArrayList enemigos = PoolingUnidades.unidades; //Sacar la lista de enemigos desde el pooling de unidades.
        GameObject temp; //crear un gameobject temporal que se usara para asignarle cada una de las unidades y chekear la distancia contra la torre.
        foreach ( Object item in enemigos) //Los array list tienen objetos y la coleccion donde lo voy a utilizar es una coleccion de enemigos. Necesitamos la estructura foreach para iterar en la lista de enemigos
        {
            temp = (GameObject)item; //Necesito hacer un casting explicito porque dentro de enemigos solamente hay object
            if (Vector3.Distance(temp.transform.position, this.transform.position) < distancia_umbral)//Preguntar por la distancia del temp a este objeto. Si esa distancia es menor a la distancia umbral que esta definida en la clase...entonces
            {
                return temp; //retornar la referencia a ese elemento
            }
        }
        return null; //si termino el ciclo y no encuentro ningun elemento cercano retorno null: No hay enemigos cercanos.
    }

    public bool Esta_activa
    {
        get
        {
            return esta_activa;
        }

        set
        {
            esta_activa = value;
        }
    }

    public GameObject Enemigo
    {
        get
        {
            return enemigo;
        }

        set
        {
            enemigo = value;
        }
    }
}
Implementacion de balas


Code: Select all

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

public class Bala : MonoBehaviour {

    private GameObject objetivo; //objetivo al cual le va a disparar la bala.
    private float velocidad = 2; //velocidad de la bala


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

        Vector3 direccion; //declarando el vector direccion
        if (objetivo!=null) //Si el objetivo es diferente de null disparar bala
        {
            direccion = objetivo.transform.position - this.transform.position; //La bala se mueva en la direccion del enemigo
            this.transform.position += velocidad * direccion * Time.deltaTime; //Para mover la bala
        }
	}

    public void ActivarBala(Torre torre)//Metodo publico el que va a activar la bala y le llega una referencia de la torre la cual sabe a que enemigo hay que dispararle
    {
        objetivo = torre.Enemigo;//al objetivo se le asigna el enemigo de la torre
    }
}
Implementacion gráfica de la barra de vida


Code: Select all

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

public class LogicaBarra : MonoBehaviour {

    public GameObject esfinge; //Personaje 
    public GameObject barra_dorada; //referencia a ambas barras
    public GameObject barra_gris;
    float escala = .0001f; //factor de escala
    SpriteRenderer sr; //referencia a un sprite render

	// Use this for initialization
	void Start () {
        sr = barra_dorada.GetComponent<SpriteRenderer>(); //cuando arranca el script se obtiene el sprite render de la barra dorada
	}
	
	// Update is called once per frame
	void Update () {
		if(sr.transform.localScale.x>0) //si la escala es mayor que cero me puede escalar el scale render
        {
            sr.transform.localScale -= new Vector3(escala, 0); //escalar solo horizontalmente
            barra_dorada.transform.position = esfinge.transform.position - new Vector3(.2f-sr.bounds.size.x/2,-.2f); //barra siempre va arriba del personaje. A la posicion que tiene esfinge se le resta un vector. Para que la barra no se escale desde el centro. bounds son las propiedades graficas del elemento.
            barra_gris.transform.position = esfinge.transform.position - new Vector3(-.04f, -.2f); // barra gris siga al personaje
        }
	}
}

User avatar
SergioFlorez
Posts: 14
Joined: Tue Jul 18, 2017 4:13 pm

Re: Estudios Ox - Gods vs Titans

Post by SergioFlorez » Thu Oct 05, 2017 3:34 pm

Avance
Se destruye la barra gris cuando la barra dorada desaparece y se destruye la unidad si colisiona con un rayo cierto numero de veces.

Code: Select all

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

public class LogicaBarra : MonoBehaviour {

    public GameObject esfinge; //Personaje 
    public GameObject barra_dorada; //referencia a ambas barras
    public GameObject barra_gris;
    float escala = .0001f; //factor de escala
    SpriteRenderer sr; //referencia a un sprite render

	// Use this for initialization
	void Start () {
        sr = barra_dorada.GetComponent<SpriteRenderer>(); //cuando arranca el script se obtiene el sprite render de la barra dorada
	}
	
	// Update is called once per frame
	void Update () {
		if(sr.transform.localScale.x>0) //si la escala es mayor que cero me puede escalar el scale render
        {
            sr.transform.localScale -= new Vector3(escala, 0); //escalar solo horizontalmente
            barra_dorada.transform.position = esfinge.transform.position - new Vector3(.2f-sr.bounds.size.x/2,-.2f); //barra siempre va arriba del personaje. A la posicion que tiene esfinge se le resta un vector. Para que la barra no se escale desde el centro. bounds son las propiedades graficas del elemento.
            barra_gris.transform.position = esfinge.transform.position - new Vector3(-.04f, -.2f); // barra gris siga al personaje
        }
        else
        {
            Destroy(barra_gris.gameObject);
        }
    }
}

Code: Select all

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

public class Unidad1 : MonoBehaviour {

    //Miembro dato publico
    public GameObject ruta; //ruta: conjunto de puntos que pintamos en el escenario
    private int indice; //Se utiliza para ir navegando entre los puntos de esa ruta
    private Vector3 posicion_inicial;
    private Vector3 posicion_siguiente; //A la cual la unidad se puede mover
    private float vel = .5f; //Las unidades tienen velocidad que va a ser de uno
    private float distancia_punto = 0.5f; //Distancia al proximo punto
    private bool esta_viva = true; //por defecto el miembro dato booleano esta falso
    private float contador;

    

    // Use this for initialization
    void Start () {
        posicion_inicial = this.transform.position; //posicion que tiene la unidad cuando arranca. Asignar la posicion inicial.
        posicion_siguiente = ruta.transform.GetChild(0).position; //parar al personaje (a la unidad) en el primer punto.
        contador = 0;
	}
	
	// Update is called once per frame
	void Update () {

        if(esta_viva) //Controlarnos cuando se va a mover el personaje y permitirnos ver lo siguiente
        {
            Vector3 dir = posicion_siguiente - this.transform.position; //Calcular la direccion entre la posicion siguiente y la posicion actual que esta en tranform.position
            this.transform.position += dir * vel * Time.deltaTime; //Mover el personaje siguiendo esta direccion lo multiplicamos por la velocidad y cada vez que Unity ejecuta el Update se incrementa el tiempo por eso se multiplica por Time.deltatime para que pueda avanzar

            //Para poder saber cuando saltar de un punto a otro al proximo punto lo calculamos con la magnitud de la direccion probando si es menor o igual a la distancia del punto
            //Si eso pasa quiere decir que la unidad llego al punto y entonces va a pedir un nuevo punto
            if (dir.magnitude <= distancia_punto)
            {
                //Como pide el nuevo punto. Cuantos elementos como hijos tenemos en esa ruta
                if (indice + 1 < ruta.transform.childCount)
                {
                    indice++; //se incrementa la ruta
                    posicion_siguiente = ruta.transform.GetChild(indice).position; //Le asigno como posicion siguiente de la ruta obtengo el transform y el get child en la posicion indice y de ahi obtengo el transform
                                                                                   //Debug.Log("xs" + posicion_siguiente.x + "ys" + posicion_siguiente.y); //Debug para ir mirando cual es la posicion x siguiente y la posicion y siguiente
                }
                else //cuando esta condicion sea flasa -> para volver a reutilizar el enemigo
                {
                    indice = 0; //volvemos el indice igual a cero para que vuelva a considerar los puntos de la ruta
                    this.transform.position = posicion_inicial; //La posicion de este elemento va a ser la posicion inicial.
                    posicion_siguiente = ruta.transform.GetChild(0).position; //volver a asignar la posicion siguiente como al principio
                }
            }
        }
        

		
	}


    //Crear un evento para destruir la bala cuando colisiona lo cual no se recomienda pero se utiliza para probar su funcionamiento
    void OnTriggerEnter2D(Collider2D otro)
    {
        if (otro.gameObject.tag == "bala")
        {
            Destroy(otro.gameObject);
            contador += 1;
            if (contador == 50)                
            {
                indice = 0;
                this.transform.position = posicion_inicial;                
                posicion_siguiente = ruta.transform.GetChild(0).position;
                contador = 0;
            }
        }
    }

    public bool Esta_viva
    {
        get
        {
            return esta_viva;
        }

        set
        {
            esta_viva = value;
        }
    }
}
Capturas del avance del juego


Image
Image
Image
Image
Image

User avatar
Juliana Rojas
Posts: 24
Joined: Tue Jul 18, 2017 4:11 pm

Re: Estudios Ox - Gods vs Titans

Post by Juliana Rojas » Tue Oct 10, 2017 9:24 pm

Semana 13

Preguntas:


¿Que hemos hecho?
*Destrucción de la barra gris cuando la barra dorada desaparece.
*Destrucción de la unidad cuando una bala la toca cierto numero de veces.
*Diseño de la selección de nivel, la descripción de las torres y cada uno de sus elementos.

¿Que vamos a hacer?
*Programación del menú principal.
*Optimizacion del ataque de Zeus
*Optimizacion de la barra de vida en cada uno de las instancias de las unidades.

¿Que dificultades hemos tenido?
La programación no es el fuerte de ninguno de los dos pero estamos haciendo lo que esta en nuestras manos.

Evidencias

Se mejorara el aspecto de la descripción para que concuerde con el diseño del juego.
Image
Image
Image
Image

Se agregaran mas detalles y mas niveles al mapa del juego.
Image

Los colores de los carteles no coinciden con la paleta de colores del juego.
Image
Image

Aun que se hicieron cambios necesarios al diseño se sugiere concentrarse en la programación del nivel.

User avatar
SergioFlorez
Posts: 14
Joined: Tue Jul 18, 2017 4:13 pm

Re: Estudios Ox - Gods vs Titans

Post by SergioFlorez » Thu Oct 12, 2017 10:38 pm

Preguntas:

¿Que hemos hecho?
*Diseño de la selección de nivel, la descripción de las torres y cada uno de sus elementos.
*Diseño Mapa de Grecia para la selccion de nivles.

¿Que vamos a hacer?
*Programación del menú principal.
*Optimizacion del ataque de Zeus.
*Implementacion de mas torres.
*Optimizacion de la barra de vida en cada uno de las instancias de las unidades.
*Implementacion de nuevos ataques de las nuevas torres.

¿Que dificultades hemos tenido?
Esta semana ha estado muy pesada a causa de varios parciales en la misma, pero el fin de semana se intentara progresar lo mas que se pueda.

User avatar
xacarana
Site Admin
Posts: 1028
Joined: Fri Jan 15, 2016 6:13 pm

Re: Estudios Ox - Gods vs Titans

Post by xacarana » Sat Oct 21, 2017 8:54 am

Se olvidaron del proyecto. Tienen dos strikes

Image

Image
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
SergioFlorez
Posts: 14
Joined: Tue Jul 18, 2017 4:13 pm

Re: Estudios Ox - Gods vs Titans

Post by SergioFlorez » Tue Oct 24, 2017 10:14 pm

Preguntas:

¿Que hemos hecho?
*Diseño final del HUD.
*Diseño de proyectil de Hefesto.

¿Que vamos a hacer?
*Programación del menú principal.
*Optimizacion de la animación en el juego.
*Implementacion de mas torres.

¿Que dificultades hemos tenido?
Poco tiempo entre semana y muchas entregas para avancar lo suficiente, pero hacemos todo lo posible.

Proyectil de Hefesto (Roca):
Image

Elementos del HUD:

Vida:
Image

Fe:
Image

Enemigos:
Image

Play:
Image

Pausa:
Image

User avatar
SergioFlorez
Posts: 14
Joined: Tue Jul 18, 2017 4:13 pm

Re: Estudios Ox - Gods vs Titans

Post by SergioFlorez » Thu Oct 26, 2017 8:30 pm

Preguntas:

¿Que hemos hecho?
*Diseño final del HUD.
*Programación y diseño de la seleccion de torres

¿Que vamos a hacer?
*Programación del menú principal.
*Optimizacion de la animación en el juego.

¿Que dificultades hemos tenido?
*Problemas para incorporar las animaciones.

Codigo elegir torres

Code: Select all

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

public class ponericonos : MonoBehaviour {
    public GameObject zeus;
    public GameObject hefesto;
  

    // Use this for initialization
    void Start()
    {
        zeus.SetActive(false);
        hefesto.SetActive(false);
        
    }

    // Update is called once per frame
    void Update()
    {

    }

    //al precionar click
    void OnMouseDown()
    {
        //Torre Zeus 
        Vector3 posuno = this.transform.position;
        posuno.x = posuno.x - .3f;
        posuno.y = posuno.y + .2f;
        zeus.transform.position = posuno;
        zeus.SetActive(true);

        //Torre Hefesto
        Vector3 posdos = this.transform.position;
        posdos.x = posdos.x + .2f;
        posdos.y = posdos.y + .2f;
        hefesto.transform.position = posdos;
        hefesto.SetActive(true);

        

        //destructor de tarjet
        Destroy(this.gameObject);

    }

}

User avatar
Juliana Rojas
Posts: 24
Joined: Tue Jul 18, 2017 4:11 pm

Re: Estudios Ox - Gods vs Titans

Post by Juliana Rojas » Fri Oct 27, 2017 9:32 pm

Storyboard
Planeación del video
Image

Image

Image

Image

Video


User avatar
Juliana Rojas
Posts: 24
Joined: Tue Jul 18, 2017 4:11 pm

Re: Estudios Ox - Gods vs Titans

Post by Juliana Rojas » Tue Oct 31, 2017 4:05 pm

Preguntas:

¿Que hemos hecho?
*Barra de vida en las instancias de la Esfinge
*Implementacion del menu de Inicio
*Menu de pausa
*Creditos

¿Que vamos a hacer?
*Programacion de los demas enemigos y oleadas
*Organizacion de las coordenadas de las torres
*Vida del jugador

¿Que dificultades hemos tenido?
*Problemas para incorporar las animaciones.
*Probelmas con la programacion.

Script del Menu

Code: Select all

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

public class Menu : MonoBehaviour {

    public void BotonScenas()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Scenes");
    }

    public void BotonCreditos()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Creditos");
    }

    public void BotonSalir()
    {
        UnityEngine.Application.Quit();
    }

    public void BotonVolverInicio()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Inicio");
    }
}
Script del boton de pausa

Code: Select all

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

public class ScriptBoton : MonoBehaviour {

    public bool pausa;
	void Start () {
        pausa = false;
	}
	
	void Update () {
		
	}
    public void EnPausa()
    {
        pausa = !pausa;
        if (!pausa) 
        {
            Time.timeScale = 1;
        }
        else if (pausa)
        {
            Time.timeScale = 0;
        }
    }

}
Parte nueva del Script de la barra de vida de los enemigos

Code: Select all

    // Update is called once per frame
    void Update()
    {
        if (vida < 0) { vida = 0; }
        if (vida == 0f) { Destroy(this.gameObject); }
    }

    public float Vida
    {
        get
        {
            return vida;
        }
    }
}

Post Reply