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

Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Fri Jan 20, 2017 10:40 am

Integrantes:
*Santiago Ahumada
*Andrès Haydar
*Jose David Yepes

Image

Image

Nombre del juego: Dawn of Rektwood

Historia del juego:

Las viejas historias cuentan, que más allá del oeste, pasando las llanuras, se encuentra el antiguo reino de Rozemnrekt, hogar de historias sombrías y eventos descomunales. Se dice que en el corazón del reino se encontraba el bosque de RektWood, en donde habitaban antiguos seres mágicos, que estaban ligados al bosque y se encargaban de protegerlo y cuidarlo.
En una tarde de otoño, al norte, en el horizonte, se divisaron siluetas negras que a su paso dejaban un rastro de contaminación y destrucción, eran las temibles máquinas. Poco se sabe de aquellas creaciones, solo que pensaban por ellas mismas, se construían entre ellas y que estaban obsesionadas con conseguir mineral de Rektelio, que se concentraba debajo de lugares mágicos.
Nadie sabe si las criaturas del bosque lograron contener y vencer a las despiadadas maquinas, o si por el contrario, sucumbieron y fueron reducidas a cenizas junto con el bosque.


Plan de trabajo (SPRINT):

*Semana 3-4 (Concept personajes y niveles)

(3)Miércoles: Presentación primeros bocetos de los concepts.
(3)Viernes:Presentación de más avances de concepts con el anexo de estructuras defensivas.
Final:Domingo 5 de Enero.

(4)Miércoles: Presentación de todos(o dependiendo de la situación, los más completos) los concepts de los personajes, sus personalidades y sus posibles habilidades.
(4)Viernes:Presentación del concept final del nivel,de elementos y decoraciones y de las estructuras defensivas.
Final:Domingo 12 de Enero.

*Semana 5-6 (Planteamiento de mecánicas y diseño de personajes, nivel y menús)

(5)Miércoles: Presentación de ideas generales sobre las mecánicas con sus respectivos referentes.(enemigos, defensas, etc)
(5)Viernes: Presentación primeros diseños enemigos
Final:Domingo 19 de Enero.

(6)Miércoles: Presentación primeros diseños de torres.
(6)Viernes:Presentación diseño y elementos del nivel junto a sus respectivos menús.
Final:Domingo 26 de Enero.


Referentes gráficos:



*Escenario:

Image
Image
Image
Image
Image
Image

*Personajes del bosque:

Image
Image
Image
Image

*Personajes Máquinas:

Image
Image
Image

Concept logo Mirror Face:

Image
Image
Last edited by JoseDavid97 on Fri Mar 31, 2017 12:24 am, edited 13 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 » Tue Jan 24, 2017 10:51 pm

Last edited by JoseDavid97 on Fri Feb 03, 2017 12:25 am, edited 1 time 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 » Tue Jan 31, 2017 9:03 pm

Adelantos Semana 3-4


Concept nivel y personajes

Preguntas

Semana 3

¿Que hemos hecho?

*Logo de la empresa.
*Primeros concepts del nivel.
*Primeros concepts de las facciones.

¿Que haremos?

*Durante estas semanas seguiremos subiendo màs concepts junto màs referentes.
*Estará listo el logo del juego.

¿Que dificultades han tenido?

*El único problema por el momento es que a uno de los integrantes se le desconfiurò el driver de la wacom y esto retraso el diseño de nivel.

Semana 4

¿Qué hemos hecho?

Ya definimos el estilo visual, finalizando la fase de concept y paralelamente hemos ido trabajando en el área de programación.

¿Qué haremos?


Nos dispondremos a adelantar la parte del diseño y las mecánicas, además de seguir con las pruebas de programación.

¿Qué dificultades han tenido?

Nada relevante de momento.





Progreso del logo del juego.

Image

Image

Conepts generales (Logo del juego, jefe final, botones pantalla, primer sketch nivel)

Image

Facción del bosque:

Image

Image

Faccion de Robots.

Image

Image

Concept nivel

Image

Image

Image

Image

Image

Image

Image
Last edited by JoseDavid97 on Fri Feb 10, 2017 11:13 am, 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 » Thu Feb 09, 2017 8:32 pm

EXTRA: Adelantos y pruebas programación.

Creación del escenario de pruebas:

Image

Montaje:

Image

Video de prueba:

Mirar de 0:03 a 0:17



Codigo de ruta:

Code: Select all

public class Unidad : MonoBehaviour {

    public GameObject ruta;
    private int indice;
    private float tiempo;

    void Update()
    {
        if (tiempo > 0.5)
        {
            if (indice < ruta.transform.childCount)
            {

                Debug.Log(ruta.transform.GetChild(indice).transform.position.x + "  " + ruta.transform.GetChild(indice).transform.position.y);

                this.transform.position = new Vector3(ruta.transform.GetChild(indice).transform.position.x, ruta.transform.GetChild(indice).transform.position.y, this.transform.position.z.time.position);
                indice++;

            }
            tiempo = 0;
        }

        else
        {

            tiempo += Time.deltaTime;
        }


    }
}
Image

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

Re: Mirror Face Studios - Dawn of Rektwood

Post by xacarana » Fri Feb 10, 2017 10:33 am

Muy bien, sigan con ese ritmo

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 » Tue Feb 14, 2017 9:45 pm

Adelantos Semana 5-6

Semana 5:

Qué hicieron?

Empezamos los diseños de las torres, del escenario y los enemigos, además de que planteamos las mecánicas y seguimos con las pruebas de animación.

Qué van a hacer?

Seguiremos con la experimentación de unity para probar las mecánicas y la parte del diseño

Qué problemas han tenido?

En programación, tocó buscar otra alternativa al pooling, esto debido a que el código no funciona como debería. También se tuvieron problemas con la detección de los enemigos debido a qué el programa detecta como error la palabra "this".

Mecanicas:



Algunos referentes:

Kingdom rush enemigos:





*Nota: Ver estadisticas de vidas que quitan, movimiento de la unidad y vida.

Adelanto diseño de Torretas y elementos del escenario:

Image

Image

Image

Adelanto enemigos:

Image

Image

Image
Last edited by JoseDavid97 on Wed Feb 15, 2017 10:27 am, edited 8 times in total.
Image

AndresHaydar
Posts: 2
Joined: Fri Jul 22, 2016 10:29 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by AndresHaydar » Tue Feb 14, 2017 9:46 pm

}

Code: Select all

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Funciones
{
    class Program
    {
        public static void Ej1(int A, int B, bool C)
        {
        }

        public static bool Ej2(double A, float B)
        {
            bool ejercicio = true;
            return ejercicio;
        }

        public static string Ej3(float A, bool B)
        {
            string texto;
            texto = "hola mundo";
            return texto;
        }

        public static float Ej4(bool A, int B)
        {
            float pi;
            pi = 3.14f;
            return pi;
        }

        public static double Ej5(int[] A)
        {
            double R;
            R = 1;
            return R;
            
        }

        public static double Ej6(double A, double B, double C, double D)
        {
            return (A + B + C + D / 4);
        }

        public static string Ej7(bool A, int[] B, float C, float D)
        {
            string texto;
            texto = "si";
            return texto;
        }

        public static void Ej8(string A, int B)
        {
        }

        public static void Ej9(int A, float B, bool C)
        {
        }

        public static string Ej10(string A, string B)
        {
            string res;
            res = "hello";
            return res;
        }

        public static string Ej11(double A, char B)
        {
            string texto;
            texto = "estos son tus datos";
            return texto + A + B;
        }

        public static string Ej12(int A)
        {
            string respuesta;
            respuesta = "tu numero era";
            return respuesta;
        }

        public static int Ej13(int A, int B, int C)
        {
            return (A - B - C);
        }

        public static int[] Ej14(int A, string B)
        {           
			int[] Ej14 = {1, 2, 3};

            return Ej14;
        }

        public static int Ej15(string A)
        {
            int res;
            res = 1;         
            return res;
        }

        public static bool Ej16(double A, float B)
        {
            bool prograamando;
            prograamando = true;
            return prograamando; ;
        }

        public static double Ej17(char A, int B)
        {
            double respuesta;
            respuesta = (A + B);
            return respuesta;
        }

        public static void Ej18(int A)
        {            
        }

        public static float Ej19(float A)
        {
            float conversion;
            conversion = 20;
            return conversion*(2.2f);            
        }

        public static bool Ej20(int A, int B)
        {
            bool mayorque;
            mayorque = true;
            return mayorque;       
        }

      
        static void Main(string[] args)
        {

        }
    }

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

Re: Mirror Face Studios - Dawn of Rektwood

Post by JoseDavid97 » Tue Feb 14, 2017 9:47 pm

Code: Select all

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Fabrica_de_Rektelio
{
    class Program
    {
        static void Main(string[] args)
        {
            Rektelio rektelio;

            rektelio = new Rektelio();

            rektelio.Nombre = "Azul";

            rektelio.Invocacion();

            Console.WriteLine("wOLOLOLOL " + rektelio.Nombre);
            Console.ReadKey();
        }


        public class Rektelio
        {
            /*Miembros dato, variables de la clase*/
            private string nombre;
            private string atrivuto;


            public Rektelio()
            {

            }

            public void Invocacion()
            {
                Console.WriteLine("Wolololo " + Nombre);
            }

            public string Nombre
            {
                get
                {
                    return nombre;
                }

                set
                {
                    nombre = value;
                }
            }

            public string atrivuto
            {
                get
                {
                    return atrivuto;
                }

                set
                {
                    atrivuto = value;
                }
            }
        }
    }

    namespace ConsoleApplication4
    {


        class Program
        {
            ///Standares
            public static string Saludar() ///1
            {

                string a;
                a = "Qué más ome";
                return a;

            }

            public static int suma(int a, int b)///2
            {
                return (a + b);
            }

            public static bool Negador(bool valor)///3
            {
                return !valor;
            }

            public static string Ejercicio()///4
            {
                string ej;
                ej = "Qué buen ejercicio";
                return ej;
            }

            public static float Resta_Decimal(float a, float b)///5
            {
                return (a - b);
            }

            public static double division(double a, double b)///6
            {

                return (a / b);
            }

            public static float multiplicación_dec(float a, float b)//7
            {
                return (a * b);
            }

            public static int ArrayV(int[] dato)///8
            {

                return dato[];
            }

            public static string mayorMenor(int a, int b)///9
            {
                string respuesta;
                respuesta = "Iguales";
                string Menor;
                Menor = "es menor";
                string mayor;
                mayor = "es mayor";

                if (a == b)
                {
                    return respuesta;
                }
                if (a > b)
                {
                    return a + mayor;
                }
                if (a < b)

                {
                    return a + Menor;
                }
            }

            public static bool Afirmativo()///10

            {
                bool a;
                a = true;
                return a;
            }

            public static string Despedir()///11
            {
                string desp;
                desp = "chao";
                return desp;
            }

            public static bool Falso()///12
            {

                bool f = false;
                return f;
            }

            public static string Errorfatal()///13
            {
                string er;
                er = "Error 404";
                return er;
            }

            public static int Conversor_cero(int a)///14
            {

                return (a * 0);
            }

            public static double area_triangulo(double b, double h)///15
            {
                double respuesta = (b * h);
                return (respuesta / 2);
            }

            public static double Area_C(double a, double b)///16
            {
                return (a * b);
            }

            public static string Parentesis(double a)///17
            {
                string uno;
                uno = "(";
                string dos;
                dos = ")";
                return uno + a + dos;
            }

            public static float Fuerza(float masa, float gravedad)///18
            {
                return masa * gravedad;
            }

            public static double Senito(double a)///19
            {
                return Math.Sin(a);
            }

            public static double Coseno(double b)///20
            {
                return Math.Cos(b);
            }

            /// arrays primitivos

            public static int[] array()
            {
                int[] array3 = { 1, 2, 3, 4, 5, 6 };
                return array3;
            }

            public static float CalcPro(float[] datos)
            {
                float promedio = 0f;
                for (int i = 0; i < i.Length; i++)
                {
                    promedio + datos[i];
                }

                return promedio;
            }

        } static void Main(string[] args)
        {
        }
    }
}

 
Image

User avatar
Santiago9801
Posts: 22
Joined: Fri Jul 22, 2016 10:49 am

Re: Mirror Face Studios - Dawn of Rektwood

Post by Santiago9801 » Tue Feb 14, 2017 10:10 pm

Code: Select all

using System;
				
public class Program
{
    /// 1)
	public static void Main()
	{
		Console.WriteLine("Hello World");
		
	}
  	///2 
    public static double suma ( int a, int b)

	 {
	    return a+b;
		
       }
	///3 

	
	public static double resta ( int a, int b)
	
 {
      return a-b;
		
	}
	///4
	public static double multiplicacion (int a, int b, int c)
		
	{
		return a*b*c;
		
	}
	
	/// 5
	
   public static double division ( int a, int b)
	   
	{
	   return a/b;
	   
	   }
	///6 
	
	public static string meme ( string a)
		
	{
		a="Que wen momo";
		
		return a;
	
	}
	
	///7
	
	public static void (string a,string b) 
		
   {;
	}	
	///8 
	
	public static double Raiz (double a)
	{
		return Math.Sqrt(a);
		
	}

///9 
   public static double Tangente (double a)
	{
		return Math.Tan(a);
	}
///10
}
	public static double Seno (double a)
	{
		return Math.Sin(a);	
	
	}
/// 11
    public static double Coseno (double numero1)
	{ 
		return Math.Cos(numero1);
		
		}
   ///12
		public static string Frase ( string a)
		{
			a= "hola men";
			
			return a;
			}
		/// 13
			
			public static string frase_2 (string a)
				
			{
				a="Cuenta un cuento";
				
				return a; 
				}
    /// 14
         public static string frase_3 ( string a)
			 
			 {
			 
			a=" Esta es mi cancion de despedida";
			
			 return a;  
			}
///15 
     public static double Logaritmo10(double numero1)
	{
		return Math.Log10(numero1);
	}
			
///16 
     public static double CuboA(double a)
	{
		return 6* Math.Pow(a,2);
	}
///17 
    public static string Juli( string a)
	{
		a="With me";
	   return a; 
	}
///18 
public static double RectanguloA (double b, double h)
	{
		return b*h;
	}
///19 
     public static string Nieve( string a)
		 
		{
		 a="que chucha frio"; 
		 return a; 
		 
		}
		
	///20
    public static string fin( string a)
		{
		
		a="termine :D";
		
		return a;	
}
		 
/// 21 

public static int [] Informacion ( int [] valores)
{
	int [] result = new int [3];
	
	int mayor= int.MinValue;
	
	int menor= int.MaxValue;
	
	int suma = 0;
	
	for ( int i= 0; i < valores.length; i++)
		
	{
		suma += valores[i];
		
		if (valores[i] < menor) menor= valores [i];
		
		if (valores[i] > mayor) mayor = valores [i];
	}
	
	result[0] = mayor;
	result[1] = menor;
	result[2] = suma/ valores. Length;
	
	return result;
	
}
}

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 15, 2017 1:12 am

EXTRA: Adelantos y pruebas programación 2

Image

Video adelantos:




Código de spawn enemigos:

Code: Select all

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Spawn : MonoBehaviour
{

    public float altura_maxima;
    public float altura_minima;
    public float RateSpawn;
    private float CurrentRateSpawn;
    public GameObject Prefab;
    public List<GameObject> Enemigo;
    public int maximo_enemigos;
    private float posicion_azar;

    // Use this for initialization
    void Start()
    {

        for (int i = 0; i < maximo_enemigos; i++)


        {
            GameObject enemigo_Temporal = Instantiate(Prefab) as GameObject;
            Enemigo.Add(enemigo_Temporal);
            enemigo_Temporal.SetActive(false);
        }
    }

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

        CurrentRateSpawn = CurrentRateSpawn + Time.deltaTime;
        if (CurrentRateSpawn > RateSpawn)
        {
            CurrentRateSpawn = 0;

            Spawnn(); //Mandar a llamar el metodo Spawn
        }

    }
    //Metodo Spawn
    void Spawnn()
    {

        int azarPos = Random.Range(0, 9);
        if (azarPos < 5)
        {
            posicion_azar = altura_maxima;
        }
        else
        {
            posicion_azar = altura_minima;
        }
        GameObject enemigo_Temporal = null;
        for (int i = 0; i < maximo_enemigos; i++)
            if (Enemigo[i].activeSelf == false)
            {
                enemigo_Temporal = Enemigo[i]; break;
            }

        if (enemigo_Temporal != null)
        {
            enemigo_Temporal.transform.position = new Vector3(transform.position.x, posicion_azar, transform.position.z);
            enemigo_Temporal.SetActive(true);
        }

    }



}




*Ya logramos solucionar el problema de la deteccción de enimos.Lo que hicimos fue usar fisicas en 3d.Creamos una Sphere que detecta box coolliders y los almacena en un array, asi, la torre puede detectar varios enemigos.

Code: Select all

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

public class Torre : MonoBehaviour {

    
    public float Distancia_umbral;
    public int TotalEnemigos;
    public Vector3 center;

    

    // Use this for initialization

    void Start () {
       
    }

    // Update is called once per frame
    void Update()
    {
        center = transform.position;
        
        Collider[] hitColliders = Physics.OverlapSphere(center, Distancia_umbral);
            
        TotalEnemigos = hitColliders.Length;

        for (int i = 0; i <= TotalEnemigos; i++)
        {
            if (hitColliders[i].tag == "Enemigo")
            {
                Debug.DrawLine(transform.position, hitColliders[i].transform.position, Color.red);

            }
        }



    }
Aqui el video mostrando como los detecta:




Actualización: Ya con las torretas detectando a los enemigos, decidimos dar el siguiente paso y programar sus disparos, para eso, nos movimos a otro campo de pruebas en donde tendremos dos tipos de torreta y dos tipo de balas.

Aqui el scrip de las balas:

Code: Select all

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

public class Bala : MonoBehaviour
{

    public float velocidad;
    public Vector3 objetivo;
    private Vector3 pos_actual;
    private Vector3 pos_anterior;
    private Vector3 Distancia;



    // Use this for initialization
    void Start()
    {
        pos_actual = transform.position;
        pos_anterior = pos_actual;

    }

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




        Vector3 direccion = objetivo - transform.position;
        transform.position += velocidad * direccion * Time.deltaTime;
        pos_actual = transform.position;
        Distancia = pos_actual - pos_anterior;

     
     

        pos_anterior = pos_actual;







    }

    

}
Hicimos algunos ajustes en los otros scrips, como que por ejemplo, cuando la bala toca al enemigo se destruye y manda un mensaje Debub.log que dice "IMPACTO" para validar que las balas si les estén impactando y también que si alguna bala queda en el suelo, se auto destruye pasado un tiempo determinado.

Aquí el script del tiempo de vida de la bala:

Code: Select all

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

public class Tiempo_de_vida : MonoBehaviour
{
    public float TiempoVida;
    // Use this for initialization
    void Start()
    {

        Destroy(gameObject, TiempoVida);
    }

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

    }

   
}
Image

Aquí el vídeo de demostración:



Adicional a esto, hemos empezado a hacer pruebas con la barra de vida, aún tiene errores y de momento solo se limita ir disminuyendo hasta desaparecer.Cuando la vida llega a 0 se lanza un mensaje de Debug.Log que dice "Destruye" y se destruye la barra de vida.El enemigo aún no se destruye ya que es un proceso muy costoso y ha causado que unity crashee.

Image

Aqui el video de demostración:



Actualización:

Esta actualización traemos una nueva barra de vida funcional y una nueva torre que hace daño cuerpo a cuerpo.

Barra de vida:

Optamos por hacerla animada y los resultados han sido satisfactorios, hay uno que otro bug pero funciona bien.La animación funciona por medio de estados.La barra baja de 10 en 10 partiendo desde 100. También programamos vidas para los enemigos, al morir cierto numero de veces, no vuelven a aparecer.

Aqui el animator o como decidimos llamarle, la telaraña:

Image

*Son recortes pegados ya que no existe zoom out en el animator de unity.

Sript barra:

Code: Select all

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

public class Barra_Vida : MonoBehaviour
{

    public GameObject Enemigo;
    public GameObject BarraVerde;
    public GameObject BarraRoja;
    public GameObject BarraMarco;
 
    
    SpriteRenderer sr;
    private Vector3 PosicionVerde;
    private Vector3 PosicionRoja;
    private Vector3 PosicionMarco;
   
    public Unidad2 colision;
   

    public Animator anim;
    private Rigidbody rb;
    public int vid;
 



    // Use this for initialization
    void Start()
    {

        rb = colision.GetComponent<Rigidbody>();
        anim = GetComponent<Animator>();
        anim.SetInteger("EstadoVida",100);

        sr = BarraVerde.GetComponent<SpriteRenderer>();
      
        


    }

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




        vid = anim.GetInteger("EstadoVida");
        Debug.Log(this.name +  vid);

        anim.SetInteger("EstadoVida", vid);

        if (colision.impacto == 1)
        {

            vid = anim.GetInteger("EstadoVida");
            anim.SetInteger("EstadoVida", vid - 20);
                
        }

        if (colision.impacto == 2)
        {
            vid = anim.GetInteger("EstadoVida");
            anim.SetInteger("EstadoVida", vid - 10);

        }

        if (vid < 0 || vid < -1 || vid == -10)
        {
            vid = anim.GetInteger("EstadoVida");
            anim.SetInteger("EstadoVida", vid * 0);
            vid = 0;

            if (vid < 0 && vid < -1 && vid == -10)
            {
                vid = anim.GetInteger("EstadoVida");
                anim.SetInteger("EstadoVida", vid * 0);
                vid = 0;
            }

        }


        if (vid == 0)

        {
          
            colision.muerte = true;

            

            if (colision.muerte == true)
            {
                
                colision.numero_muertes = colision.numero_muertes + 1;
                vid = anim.GetInteger("EstadoVida");
                anim.SetInteger("EstadoVida", vid + 100);
                Debug.Log(vid);
                Muerte();

                if (vid < 0 && vid < -1 && vid == -10)
                {
                    vid = anim.GetInteger("EstadoVida");
                    anim.SetInteger("EstadoVida", vid * 0);
                }

            }

            

        }

        if (vid < 0 && vid < -1 && vid == -10)
        {
            vid = anim.GetInteger("EstadoVida");
            anim.SetInteger("EstadoVida", vid * 0);
        }

        

        if (colision.numero_muertes == colision.muerte_definitiva)

        {
            colision.transform.position = colision.posicion_inicial;

        }


    }


    public void Muerte()

    {

     
        colision.indice = 0;
        colision.transform.position = colision.posicion_inicial;
        colision.posicion_siguiente = colision.ruta.transform.GetChild(colision.indice).position;
        Debug.Log("Muerte");
        colision.muerte = false;


    }
}









    




    


script enemigo cuerpo a cuerpo:

Code: Select all

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

public class Caballero : MonoBehaviour
{
    
    public float Distancia_umbral;
    private int Totalobj;
    public Vector3 center;
    private int Velocidad_ataque = 0;
    private Vector3 objetivo;
    public Espada espada;
    public float VelocidadDisparo = 25;




    // Use this for initialization

    void Start()

    {




    }




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


        center = transform.position;

        Collider[] hitColliders = Physics.OverlapSphere(center, Distancia_umbral);

        Totalobj = hitColliders.Length;
        Velocidad_ataque = Velocidad_ataque + 1;

        espada.ataque = false;

        if (Velocidad_ataque > VelocidadDisparo)

        {
            espada.ataque= true;
            Velocidad_ataque = 0;
        }

        for (int i = 0; i < Totalobj; i++)

        {
            if (hitColliders[i].tag == "Enemigo")
            {
                Debug.DrawLine(transform.position, hitColliders[i].transform.position, Color.red);
                espada.ataque = true;

            }

        }


    }

    }


    
Script de la espada del enemigo cuerpo a cuerpo:

Code: Select all

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

public class Espada : MonoBehaviour
{

    public float velocidad;
    private Vector3 pos_actual;
    private Vector3 pos_anterior;
    private Vector3 Distancia;
    public bool ataque = false;
    private GameObject Enemigo;
    public Caballero caballero;
    public GameObject limite;


    // Use this for initialization
    void Start()
    {

        Enemigo = limite;
        ataque = false;
        pos_actual = transform.position;
        pos_anterior = pos_actual;



    }

    // Update is called once per frame
    void FixedUpdate()
    {
        if (ataque == false)
        {

            transform.position = new Vector3(caballero.transform.position.x - 2, caballero.transform.position.y, -3);

        }

        if (ataque == true)
        {

            Vector3 direccion = Enemigo.transform.position -pos_actual;
            transform.position += velocidad * direccion * Time.deltaTime;
            pos_actual = transform.position;
            Distancia = pos_actual - pos_anterior;
            pos_anterior = pos_actual;
            ataque = false;

           
        }


        ataque = false;


    }


    void OnTriggerEnter(Collider otro)
    {

        if (otro.gameObject.tag == "Enemigo")
        {


            transform.position = new Vector3(caballero.transform.position.x - 2,caballero.transform.position.y, -3);

            ataque = false;

        }

        if (otro == limite)
        {
            transform.position = new Vector3(caballero.transform.position.x - 2, caballero.transform.position.y, -3);
            ataque = false;

        }
    }

    
}


Aqui el video de demostración:



Ultima actualización de la semana:

Se implemento un nuevo tipo de torreta, que lanza una bala y pasado un tiempo esta explota, haciendo retroceder a los enemigos.

Aquí el vídeo de demostración:



Codigo de la explosion:

Code: Select all

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

public class Explosión : MonoBehaviour {

    public bool activarBomba;
    public Unidad2 enemigo;
    public GameObject usuario;
    private Vector3 pos_enemigo;
    public float Velocidad_fuerza;
    private Vector3  pos_siguiente;
    public int fuerza;

    

	// Use this for initialization
	void Start ()
    {
        activarBomba = false;
     
	}
	
	// Update is called once per frame
	void FixedUpdate ()
    {

      

        if (activarBomba == true)
        {

            pos_enemigo = usuario.transform.position;
            pos_siguiente = new Vector3(usuario.transform.position.x - fuerza, usuario.transform.position.y + 2, 0);
            Vector3 dir = pos_siguiente - pos_enemigo;
            Debug.Log("Me movi a" + transform.position);
            transform.position += dir * Velocidad_fuerza * Time.deltaTime;
            enemigo.indice = fuerza;

            activarBomba = false;
        }




    }
}
Codigo del cañon:

Code: Select all

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

public class Cañon : MonoBehaviour
{

    public float Distancia_umbral;
    private int Totalobj;
    public Vector3 center;
    private int Velocidad_ataque = 0;
    private Vector3 objetivo;
    private bool atacar;
    public GameObject Clon;
    public float VelocidadDisparo = 25;
    public GameObject Diana;




    // Use this for initialization

    void Start()

    {




    }




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


        center = transform.position;

        Collider[] hitColliders = Physics.OverlapSphere(center, Distancia_umbral);

        Totalobj = hitColliders.Length;
        Velocidad_ataque = Velocidad_ataque + 1;

        atacar = false;

        if (Velocidad_ataque > VelocidadDisparo)

        {
            atacar = true;
            Velocidad_ataque = 0;
        }

        for (int i = 0; i < Totalobj; i++)

        {
            if (hitColliders[i].tag == "Enemigo")
            {
                Debug.DrawLine(transform.position, hitColliders[i].transform.position, Color.red);


                if (atacar)

                {


                    objetivo = Diana.transform.position;

                    Disparar(objetivo);

                }

            }
        }

    }


    void Disparar(Vector3 objetivo)
    {

        {
            GameObject obj = Instantiate(Clon, transform.position, Quaternion.identity);
            Bala bala = obj.GetComponent<Bala>();
            bala.objetivo = objetivo;

        }

    }
}
Image

Post Reply