Mirror Face Studios - Dawn of Rektwood

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

Moderator: julianmartinez16

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Feb 22, 2017 12:27 am

Semana 6

Durante esta semana trabajaremos en lo que respecta a terminar el diseño de los personajes y empezar a preparar sus animaciones, creación de elementos del escenario y seguiremos con los adelantos de programación.

Sprite sheet Defensas:


Image

*Se pueden ver que ya están implementadas tanto los proyectiles como el punto de origen.Aún falta la torre DPS y la de Coloso que se subirán más adelante.

Ya están los diseños de los dos arboles faltantes, el coloso y el "DPS".

Image

Image

Proyectil azul:

Image

*Este es el proyectil de la torre estándar, hace daño moderado a velocidad media.

Proyectil rojo:

Image

*Este es el proyectil de la torre mágica, hace daño elevado a velocidad baja.

Enemigos:

Image

Image

Image

Image

Image

*Primer boss
Last edited by JoseDavid97 on Thu Feb 23, 2017 10:28 pm, edited 4 times in total.
Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Feb 22, 2017 12:36 am

Preguntas Semana 6

¿Qué hemos hecho?

Adelantamos bastante en las pruebas e investigaciones de programación y ya iniciamos las nuevas pruebas de esta semana con la del contador de dinero, además de, adelantar más diseños.

¿Qué van a hacer?

Seguiremos con la labor de la creacion de diseño y paralelo a eso, seguiremos con las pruebas de programación.

¿Qué problemas han tenido?

De momento nada relevante, solo que el software de grabación de vídeo caducó, pero ya conseguimos otro mejor.
Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Feb 22, 2017 12:39 am

EXTRA: ADELANTOS PROGRAMACIÓN SEMANA 6

Empezamos por algo sencillo, probar el sistema de moneda, para eso, hicimos que el jugador gane dinero cada cierto tiempo.Más adelante implementaremos el pagar por torre y el ganar dinero al matar enemigos.

Vídeo de demostración:



Código de ganancia de dinero:

Code: Select all

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

public class Plata : MonoBehaviour {

    public GameObject centenas, decenas, unidades;
    private Animator ce, de, un;
    private string[] estados = { "Estado_00", "Estado_01", "Estado_02", "Estado_03", "Estado_04", "Estado_05", "Estado_06", "Estado_07", "Estado_08", "Estado_09" };
    private float tiempo_plata = 0;
    public float tiempo_limite = 25;
    private int platica = 0;

    public int Platica
    {
        get
        {
            return platica;
        }

        set
        {
            platica = value;
        }
    }






    // Use this for initialization
    void Start () {
        ce = centenas.GetComponent<Animator>();
        de = decenas.GetComponent<Animator>();
        un = unidades.GetComponent<Animator>();
	}
	
	// Update is called once per frame
	void Update () {



         tiempo_plata = tiempo_plata + 1;

        if (tiempo_plata > tiempo_limite)
        {
            platica++;
            Actualizador(platica);
            tiempo_plata = 0;
        }

       
    }

    public void Actualizador(int numero)

    {
        int unidades = numero % 10;
        int decenas = numero % 100 - unidades;
        int centenas = numero % 1000 - decenas;

        decenas = decenas / 10;
        centenas = centenas / 100;

        if (numero > 9)
        {
            de.Play(estados[decenas]);
        }
        else
        { de.Play(estados[0]); }

        if (numero > 99)
        {
            ce.Play(estados[centenas]);
        }
        else
        { ce.Play(estados[0]); }

        un.Play(estados[unidades]);
    }



}

Actualización:

Ya implementamos un código que hace que el jugador gane dinero cada vez que un enemigo muere.

Aqui el video de demostración:



Aquí el código actualizado:

Code: Select all

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

public class Plata : MonoBehaviour {

    public GameObject centenas, decenas, unidades;
    private Animator ce, de, un;
    private string[] estados = { "Estado_00", "Estado_01", "Estado_02", "Estado_03", "Estado_04", "Estado_05", "Estado_06", "Estado_07", "Estado_08", "Estado_09" };
    private float tiempo_plata = 0;
    public float tiempo_limite = 25;
    private int platica = 0;
    public Barra_Vida vida;


  
    
    public int Platica
        
     
    {
        get
        {
            return platica;
        }

        set
        {
            platica = value;
        }
    }






    // Use this for initialization
    void Start () {

        ce = centenas.GetComponent<Animator>();
        de = decenas.GetComponent<Animator>();
        un = unidades.GetComponent<Animator>();
        
       
	}

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

        tiempo_plata = tiempo_plata + 1;

        if (tiempo_plata > tiempo_limite)
        {
            platica++;
            Actualizador(platica);
            tiempo_plata = 0;

           
        }

        if (vida.activador == true)
        {
            platica = platica + 100;
            vida.activador = false;

        }

        
        
    }
       
    

    public void Actualizador(int numero)

    {
        int unidades = numero % 10;
        int decenas = numero % 100 - unidades;
        int centenas = numero % 1000 - decenas;

        decenas = decenas / 10;
        centenas = centenas / 100;

        if (numero > 9)
        {
            de.Play(estados[decenas]);
        }
        else
        { de.Play(estados[0]); }

        if (numero > 99)
        {
            ce.Play(estados[centenas]);
        }
        else
        { ce.Play(estados[0]); }

        un.Play(estados[unidades]);
    }



}

Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Tue Mar 07, 2017 11:25 pm

Semana 8

Qué hemos hecho?

Nos dedicamos a corregir bugs, a adelantar sprites y a seguir con la programación

Qué van a hacer?

Integraremos los prites finales en unity para empezar la pre entrega, adicional a esto, empezaremos a diseñar el soundtrack del juego.

Qué problemas han tenido?

Los tipicos problemas de tamaños de sprites y uno que otro bug muy molesto en la programación.

Adelantos del soundtrack:

Primera canción:



Segunda canción:



Diseños y animaciones:


Defensas:


Image

Image

Image

Máquinas:

Image
Last edited by JoseDavid97 on Fri Mar 10, 2017 6:11 am, edited 7 times in total.
Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Mar 08, 2017 12:31 am

PRUEBAS PROGRAMACIÓN SEMANA 8

Se implementaron precios a las torres, ahora para ponerlas se deberá pagar cierta cantidad de monedas, cada torre tiene un precio distinto y si no se tiene el dinero no se pueden poner. También se corrigió un bug de la barra de vida y de la bola de cañón.

Aquí el vídeo de demostración:



Actualización:

Ya se implemento la vida del jugador, que se reduce en 1 cada vez que un enemigo llega al final del trayecto sin morir.
Aquí el video de demostración:



Script Vidas:

Code: Select all

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

public class Vida : MonoBehaviour {

    public GameObject  decenas, unidades;
    private Animator  de, un;
    private string[] estados = { "Estado_00", "Estado_01", "Estado_02", "Estado_03", "Estado_04", "Estado_05", "Estado_06", "Estado_07", "Estado_08", "Estado_09" };
    private int vidas = 0;
    public int valor_ganancia;
    public GameObject Meta;
    public Meta meta;
    
  
    public int Vidas


    {
        get
        {
            return vidas;
        }

        set
        {
            vidas = value;
        }
    }



    // Use this for initialization
    void Start () {

        de = decenas.GetComponent<Animator>();
        un = unidades.GetComponent<Animator>();
        vidas = 30;
        Actualizador(vidas);
        

    }
	
	// Update is called once per frame
	void Update () {
		
        if(meta.Perdida == true)

        {

            Debug.Log("He perdido 1 vida");
            vidas = vidas - 1;
            Actualizador(vidas);
            meta.Perdida = false;
         
        }
        
	}

    public void Actualizador(int numero)

    {
        int unidades = numero % 10;
        int decenas = numero % 100 - unidades;
       

        decenas = decenas / 10;
     

        if (numero > 9)
        {
            de.Play(estados[decenas]);
        }
        else

        { de.Play(estados[0]); }

        un.Play(estados[unidades]);
    }

  
}
Script Meta:

Code: Select all

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

public class Meta : MonoBehaviour
{

    public GameObject meta;
    public bool Perdida = false;


    // Use this for initialization
    void Start()
    {

    }

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

    }

    void OnTriggerEnter(Collider otro)
    {
        if (otro.gameObject.tag == "Enemigo")
        {
            Perdida = true;
        }

    }
}
Image

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

Re: Mirror Face Studios - Dawn of Rektwood

Post by xacarana » Fri Mar 10, 2017 11:06 am

Muy bien el proceso, recomiendo que todo el equipo estudie el código y que roten los roles. Sobretodo pensando en la sustentación en la preentrega.

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

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Mar 15, 2017 10:11 am

Semana 9

Que han hecho?

Hicimos más animaciones y seguimos con la programación.

Que harán?


Terminaremos las animaciones y ensamblaremos todo en unity

Que problemas han tenido?

problemas con algunos scripts, como el de sistema de oleada y barra de vida.
Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Mar 15, 2017 10:12 am

Avances semana 9

Animaciones defensas:

Image

Image

Animaciones enemigos:

Image

Diseños enemigos:

Image

Diseño y animación pantalla de carga:

Image
Last edited by JoseDavid97 on Fri Mar 17, 2017 7:04 am, edited 2 times in total.
Image

User avatar
JoseDavid97
Posts: 70
Joined: Fri Jul 22, 2016 10:48 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Wed Mar 15, 2017 10:19 am

Programación semana 9

Estamos con el sistema de oleadas, aun no se ha corregido la copia de los enemigos por lo que aun no hay video.Se espera ser subido hoy en la noche.

Script oleadas:

Code: Select all

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

public class SistemaOleada : MonoBehaviour {

    public GameObject Enemigo;
    Barra_Vida vida;
    Unidad2 control;
    public int maximo_oleadas;
    private int contador_oleadas = 0;
    public Vector3 pos;
    
    
    
    // Use this for initialization
	void Start ()
    {

        
        vida = Enemigo.GetComponent<Barra_Vida>();
        control = Enemigo.GetComponent<Unidad2>();
        pos = vida.PuntoOrigen.transform.position;
     
	
	}
	
	// Update is called once per frame
	void Update ()

    {
		if(control.Igualdad == true)

        {
            contador_oleadas = contador_oleadas + 1;
            control.Igualdad = false;

            if(contador_oleadas == 1)
            {
                for(int i=0;i<5; i++)
                {
                    Clonador();
                    
                }

            }

            if(contador_oleadas == 2)
            {
                for(int i=0;i<10; i++)
                {
                    Clonador();
                }
            }
           
            

        }



	}

     void Clonador()

    {

        Instantiate(Enemigo,pos,Quaternion.identity);
        Debug.Log("clonacion");
        vida.anim.SetInteger("Estado", 100);
    }


}

Actualización

Se corrigió la vida del enemigo, ahora cada vez que llega al final del trayecto, aparece al principio con toda la vida, como si fuera un enemigo nuevo.Lo que estamos haciendo ahí es reciclar al enemigo.

Aquí el vídeo de demostración:



Adicional a eso, ya ideamos el sistema de oleadas.En unity hay un scrip que se encarga de vigilar el numero de enemigos en el mapa y cuando todos mueren, da la orden de que se produzca la siguiente oleada.Hay un problema de optimizacion, ya que la oleada funciona clonando al enemigo original en muchos más, lo que ocasiona que baje el rendimiento del juego, ya se están considerando soluciones.

Aquí el vídeo de demostración;



Script sistema de oleada:

Code: Select all

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

public class SistemaOleada : MonoBehaviour {

    public GameObject Enemigo;
    Barra_Vida vida;
    Unidad2 control;
    private int contador_oleadas = 0;
    public GameObject EnemigoClon;
    EstadoEnemigos Dios;
    public GameObject dios;
   

    ///public Vector3 pos;
    
    
    
    // Use this for initialization
	void Start ()
    {


        vida = Enemigo.GetComponentInChildren<Barra_Vida>();
        control = Enemigo.GetComponent<Unidad2>();
        Dios = dios.GetComponent<EstadoEnemigos>();
        
        ///pos = vida.PuntoOrigen.transform.position;
     
 	
	}

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

    {

        if (Dios.Activador[0] == 1)
        {
            Debug.Log("TOMA TU CLONADA");
            Dios.Activador[0] = 0;
            for (int i = 0; i < 3; i++)
            {
                Clonador();
            }
        } 

        if (Dios.clonar == true)

        {
            contador_oleadas = contador_oleadas + 1;
            Dios.clonar = false;
        }

        if (contador_oleadas == 1)

        {
            for (int i = 0; i < 3; i++)

            {
                Clonador();
                contador_oleadas = 0;

            }
        }


            if(contador_oleadas == 2)
            {
                for(int i=0;i< 5; i++)
                {
                    Clonador();
                contador_oleadas = 0;
                }
            }
           
            
            
        }



	

     void Clonador()

    {

        Instantiate(Enemigo,this.transform.position,Quaternion.identity);
        Debug.Log("clonacion");
        vida.anim.SetInteger("EstadoVida", 100);
        vida.anim.Play(vida.estados[10]);
        control.numero_muertes = 0;
        control.vel = Random.Range(1f,6f);

       

    }


}

Scrip que vigila a los enemigos:

Code: Select all

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

public class EstadoEnemigos : MonoBehaviour
{

   
    public float Radio;
    private int TotalEn;
    public Vector3 center;
    private GameObject[] enemigos;
    public Unidad2 Enemy;
    public Barra_Vida vida;
    public bool clonar = false;
    private int contador = 0;
    public int[] Activador;



    // Use this for initialization
    void Start()
    {
        Activador = new int[1];
    }

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

        center = transform.position;

        Collider[] hitColliders = Physics.OverlapSphere(center, Radio);
       
        TotalEn = hitColliders.Length;

        //int[] jose;
        //jose = new int[100];
        //jose[0] = 0;

        enemigos = new GameObject[TotalEn];
        int indice = 0;
        for (int i = 0; i < TotalEn; i++)
        {
            if (hitColliders[i].gameObject.tag == "Enemigo")
            {

                enemigos[indice] = hitColliders[i].gameObject;
                indice = indice + 1;
            }
        }
        
        int[] estados = new int[indice];
        for (int j = 0; j < indice ; j++)
        {
            estados[j] = 0;
            Enemy = enemigos[j].GetComponent<Unidad2>();
            Debug.Log("Estos son los enemigos en el array: " + j + "soy: " + enemigos[j].name);

            if (Enemy.numero_muertes == Enemy.muerte_definitiva)
            {
                estados[j] = 1;
            }  
        }

        contador = 0;
        for (int k = 0; k < indice; k++)
        {
            contador = contador + estados[k];
        }

        Debug.Log("CONTADOR VA EN: " + contador);

        if (contador == indice)
        {
            Debug.Log("Siguiente oleada ");
            contador = 0;
            Activador[0] = 1;

            ///clonar = true;
        }
    }
}
Last edited by JoseDavid97 on Fri Mar 17, 2017 7:46 am, edited 3 times in total.
Image

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

Re: Mirror Face Studios - Dawn of Rektwood

Post by xacarana » Wed Mar 15, 2017 11:25 am

Image

Ok, pero revisen los miembros dato, el modificador debe ser privado
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

Post Reply