Stormrage-LosDK

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

Moderator: julianmartinez16

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

Re: Stormrage-LosDK

Post by xacarana » Tue Apr 09, 2019 2:42 pm

Image

Muy bien el avance, strike para Nelson no hubo avance.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #10 12/04/2019

Post by konicky » Fri Apr 12, 2019 7:34 am

Asignación de tareas:
Nelson:
  • Implementar y programar Menú Inicial
Nicolas:
  • Implementar y programar Pooling Balas y Unidades, Menú selección de personajes y historia interactiva, prefabs unidades enemigas y torres
¿Que hemos hecho?
  • Se finalizo codigo Menú selección de personajes(ahora se selecciona con Mouse y no como el martes que era con teclado).
  • Se esta finalizando el Pooling de las balas y de las unidades
  • Se esta finalizando los prefabs de las 4 razas y las torres
¿Que vamos a hacer?
  • Finalizar Pooling Balas y Unidades
  • Finalizar Prefabs unidades y torres
¿Que dificultades hemos tenido?
  • Debido a que se daño el computador de Nicolas, no se ha podido finalizar los prefabs y el pooling(los avances estan en el computador), estos se estaran subiendo en el transcurso de la semana.
  • Se ha tenido dificultades para instanciar las unidades de cada raza cuando se selecciona en el menu Seleccion de raza
  • Se ha tenido dificultades para la finalizacion del Menu inicial(Nelson)
  • No hemos podido reunirnos fisicamente, pero hemos resuelto inquietudes atraves de Whatsapp, tambien se han puesto comentarios en el codigo
Evidencias(parte Nicolas):
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Código:
    Selección Mouse:

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.SceneManagement;
    
    public class SeleccionMouse : MonoBehaviour {
    
        public Image raza; //imagen del recuadro de la raza
        public Animator Araza; //animacion del menu de la raza
        public Color color_raza; //color por el que cambiara el recuadro(depende de la raza)
        public int id_raza; //id de la raza seleccionada(para instanciarla en la siguiente escena.
    
        public Color Defecto { get; set; }
    
        void Start()
        {
            Defecto = raza.color; //establezco el color por defecto
        }
        void OnMouseOver()
        {
            Debug.Log(id_raza);
            raza.color = Color.magenta; //cambio el color del borde del recuadro de la raza
            Araza.SetBool("Ataque", true); //animo el ataque cuando el mouse este encima del recuadro
        }
    
        void OnMouseExit()
        {
            raza.color= Defecto; //el color vuelve a su valor por defecto
            Araza.SetBool("Ataque", false); //la animacion vuelve a idle
        }
        void OnMouseDown()
        {
            Debug.Log("Se escogio la raza: " + id_raza);
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); //cambia a la siguiente escena
        }
    }
    
  • Videos:


Nicolás Alberto Barragán Mena
Pdoo2

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

Re: Stormrage-LosDK

Post by xacarana » Fri Apr 12, 2019 10:26 am

Image

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

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #11 23/04/2017

Post by konicky » Thu Apr 18, 2019 7:14 pm

Asignacion de tareas
Nicolas:
  • Implementar y programar Menu Inicial y historia. (Esto anteriormente era tarea de Nelson).
  • Corregir errores de programación Torres, disparos y pooling oleadas enemigas y balas
  • Implementar assets torres y unidades.
  • Pantalla de carga(cuando se pierde el juego y cuando se pasa de nivel).
  • GUI del juego.
¿Que se ha hecho?
  • Programacion Oleadas.
  • Prefabs torres y unidades.
  • implementacion GUI del juego.
¿Que vamos a hacer?
  • Finalizar implementacion oleadas.
  • Corregir errores programacion y diseño Torres, disparos y pooling oleadas enemigas y balas.
  • Implementacion Pantalla de carga.
  • Implementacion Menu Inicial e historia.
¿Que dificultades hemos tenido?
  • Mi computador se daño, y hasta el jueves de semana santa se pudo reparar.
  • Mi compañero de grupo, Nelson, va a cancelar la materia.
  • He tenido problemas de salud.
Evidencias:
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Videos:

  • Codigos:
    • Codigo Invocacion Oleadas:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Oleadas : MonoBehaviour
      {
          public GameObject[] enemigos_prefabs;
          public float tiempo_descanso;
          private float cronometro;
      
          void Start()
          {
              cronometro = 10f;
              
          }
      
          void Update()
          {
              if (cronometro <= 0)
              {
                  InvocarOleadas();
                  cronometro = tiempo_descanso;
              }
      
              cronometro -= Time.deltaTime;
          }
      
          void InvocarOleadas()
          {
              Debug.Log("Viene una oleada");
          }
      
      }
    • Codigo unidad(correccion):

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class UnidadEnemiga : MonoBehaviour
      {
      
          public float velocidad;
          //public Transform[] puntos_invocacion;
          private Camino camino;
          private int punto_actual;
          private bool vivo;
      
      
      
          // Start is called before the first frame update
          void Start()
          {
              //int temp = Random.Range(0, 3); //escoge aleatoriamente el punto de invocacion.
              //id_punto = temp; //asigno el punto de invocacion.
              vivo = true;
              camino = GameObject.FindGameObjectWithTag("camino").GetComponent<Camino>();
          }
      
          // Update is called once per frame
          void Update()
          {
              if (vivo)
              {
                  transform.position = Vector2.MoveTowards(transform.position, camino.puntos[punto_actual].position, velocidad * Time.deltaTime);
                  if(Vector2.Distance(transform.position, camino.puntos[punto_actual].position) < 0.5f)
                  {
                      if (punto_actual<camino.puntos.Length-1)
                      {
                          punto_actual++;
                      }
                      else
                      {
                          Destroy(gameObject);
                      }
                  }
              }
              else
              {
                  Destroy(gameObject);
              }
          }
      }
    • Codigo Camino:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Camino : MonoBehaviour
      {
          public Transform[] puntos;
      
      }
Nicolás Alberto Barragán Mena
Pdoo2

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

Re: Stormrage-LosDK

Post by xacarana » Fri May 03, 2019 3:45 pm

Image

Image

El proyecto esta olvidado, tienes dos ¡strike! espero ver mejoras para el día de hoy, sino llegarias al tercer strike.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #12 03/05/2019

Post by konicky » Fri May 03, 2019 8:08 pm

Asignacion de tareas
Nicolas:
  • Implementacion barra salud unidades.
  • Correccion barra seleccion torre.
  • Oleadas Pooling.
¿Que se ha hecho?
  • Implementacion barra salud unidades.
  • Correccion barra seleccion torre.
¿Que se va a hacer?
  • Oleadas Pooling.
¿Que dificulades hemos tenido?
  • Mi compañero cancelo.
  • Estuve fuera de la ciudad esta semana, tenia cita en la embajada para un tramite de una visa.
  • He estado enfermo esta semana.
Evidencias
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Codigos:
    Seleccion UI

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Unidad : MonoBehaviour
    {
        public GameObject ruta; // Aqui se pone el game object de ruta, con los puntos que debe seguir la unidad.
        private int punto; // Esto me indica en que punto de la ruta se encuentra el jugador.
        private float tiempo;
        private Vector3 siguiente_punto; //posicion siguiente punto donde debe moverse la unidad.
        public float velocidad; //velocidad de movimiento.
        private float distancia_minima=0.5f;//distancia minima al punto objetivo(desde donde se pone como objetivo el siguiente).
        private Animator anim; //controlador animaciones y transiciones.
        private bool mirando_correctamente = false; //esto me indicara si el enemigo o unidad mia esta mirando hacia su objetivo.
        private Vector3 posicion_inicial; //posicion desde donde empieza a caminar la unidad.
        private bool esta_viva;
        public int vida = 5;
    
    
        
    
        //Se llama cuando se ejecuta el codigo.
        void Start()
        {
            anim = GetComponent<Animator>();
            esta_viva = true;
            posicion_inicial = this.transform.position; //se asigna la posicion inicial de la unidad.
            siguiente_punto = ruta.transform.GetChild(0).position; //toma la posicion de la primera instancia(primer punto) hija de el objeto ruta.
        }
    
    
        // Se llama cada frame.
        void Update()
        {
            Vector3 direccion = siguiente_punto - this.transform.position; //Se asigna la direccion del movimiento de la unidad.
            esta_viva = (vida > 0) ? true : false;//si vida es igual a 0, la unidad murio.
            if (esta_viva)
            {
                this.transform.position += direccion * velocidad * Time.deltaTime;//cada frame se movera en la direccion x con una velocidad que se le asignara.
                mirando_correctamente = (siguiente_punto.x < this.transform.position.x) ? false : true; //si el personaje esta mirando hacia el objetivo o no.
    
                if (!mirando_correctamente) //girar el personaje si no esta mirando correctamente.
                {
                    transform.eulerAngles = new Vector3(0, 180, 0);
                }
                else
                {
                    transform.eulerAngles = new Vector3(0, 0, 0);
                }
    
                //cuando se va al siguiente punto.
                if (direccion.magnitude <= distancia_minima)
                {
                    if (punto + 1 < ruta.transform.childCount)
                    {
                        punto++;
                        siguiente_punto = ruta.transform.GetChild(punto).position; //obtiene la posicion del siguiente punto(hijo) de una instancia(padre).
                        Debug.Log("Xsig: " + siguiente_punto.x + "Ysig: " + siguiente_punto.y);
                    }
                    else
                    {
                        FindObjectOfType<UIManager>().ActualizarVida(); //actualizar slider.
                        gameObject.SetActive(false); //desactivo el enemigo hasta la nueva oleada.
                        punto = 0; //inicializamos los puntos, ya que va a volver a empezar la ruta.
                        this.transform.position = posicion_inicial; //el objeto vuelve a la posicion en donde empezo el recorrido.
                        siguiente_punto = ruta.transform.GetChild(0).position; //toma la posicion de la primera instancia(primer punto) hija de el objeto ruta.
                        
                    }
                }
            }
            else
            {
                gameObject.SetActive(false); //desactiva la unidad cuando muere.
            }
    
            
        }
    
        void OnTriggerEnter2D(Collider2D otro)
        {
            if (otro.gameObject.tag=="Bala")
            {
                Destroy(otro.gameObject);
                FindObjectOfType<UIBarraVida>().ActualizarVida();//actualiza slider unidad.
            }
        }
    
        public bool Esta_viva { get => esta_viva; set => esta_viva = value; }
    }
    
    UI Barra Vida

    Code: Select all

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class UIBarraVida : MonoBehaviour
    {
        public Slider vida_ui;
        public int vida_maxima = 10;
        private int vida_actual;
        public GameObject enemigo_ui;
        public GameObject unidad;
    
        // Start is called before the first frame update
        void Start()
        {
            vida_actual = vida_maxima;
            vida_ui.maxValue = vida_actual;
            vida_ui.value = vida_ui.maxValue;
            vida_ui.transform.position = unidad.transform.position - new Vector3(-0.05f, -0.5f);
            enemigo_ui.SetActive(false);
        }
    
        // Update is called once per frame
        void Update()
        {
          
        }
    
        public void ActualizarVida()
        {
            vida_actual--;
            vida_ui.value = vida_actual;
            enemigo_ui.SetActive(true);
        }
    }
    
Nicolás Alberto Barragán Mena
Pdoo2

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #13 06/05/2019

Post by konicky » Mon May 06, 2019 8:36 pm

Asignación de tareas:
Nicolas:
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
  • Corrección Menú inicial.
  • Corrección Drag and Drop para invocar torres y unidades.
¿Que he hecho?
  • Se finalizo la corrección Drag and Drop para invocar torres y unidades.
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
¿Que voy a hacer?
  • Corrección Menú inicial.
  • Corrección pooling torres.
¿Que dificultades he tenido?
  • Mi compañero cancelo materia.
Evidencias.
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Codigo:
    • Seleccion Menu:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class SeleccionMenu : MonoBehaviour
      {
      
          private Renderer rend;
          private PonerElemento elemento;
          public int id;
      
          public Renderer Rend { get => rend; set => rend = value; }
      
          // Start is called before the first frame update
          void Start()
          {
              Rend = GetComponent<Renderer>();
              elemento = new PonerElemento();
          }
      
          void OnMouseOver()
          {
              Rend.material.color = Color.green;
          }
      
          void OnMouseExit()
          {
              Rend.material.color = Color.white;
          }
      
          void OnMouseDown()
          {
              elemento.Seleccion = id;
              Debug.Log(elemento.Seleccion);
          }
      
      }
    • Colocar elemenrto:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class PonerElemento : MonoBehaviour
      {
      
          public GameObject[] elementos; //torre que quiero asignar.
          private int seleccion;
      
          public int Seleccion { get => seleccion; set => seleccion = value; }
      
          void OnMouseDown()
          {
              GameObject temp; //guarda el objeto que voy a instanciar.
              Vector3 posicion = this.transform.position; //guarda la posicion a la que di click.
              posicion.y = posicion.y + 0.6f; //suba un poquito la torre en y.
              temp = Instantiate(elementos[Seleccion]); //se crea el objeto torre.
              temp.transform.position = posicion; //se le asigna la posicion a la torre creada(lugar donde se dio click).
              temp.layer = 5; //aparezca en pantalla.
              Destroy(this.gameObject); //destruye la matica en donde se da click.
          }
      
      
      }
      
    • Correccion Seleccion Menu:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class SeleccionMenu : MonoBehaviour
      {
      
          private Renderer rend;
          public int id;
          private int seleccion_unidad;
      
          public Renderer Rend { get => rend; set => rend = value; }
          public int Seleccion_unidad { get => seleccion_unidad; set => seleccion_unidad = value; }
      
          // Start is called before the first frame update
          void Start()
          {
              Rend = GetComponent<Renderer>();
          }
      
          void OnMouseOver()
          {
              Rend.material.color = Color.green;
          }
      
          void OnMouseExit()
          {
              Rend.material.color = Color.white;
          }
      
          void OnMouseDown()
          {
              Seleccion_unidad = id;
          }
      
      }
      
    • Correcion Poner elemento:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class PonerElemento : MonoBehaviour
      {
      
          public GameObject[] elementos; //torre que quiero asignar.
          private int seleccion;
      
          public int Seleccion { get => seleccion; set => seleccion = value; }
      
          void Update()
          {
              Seleccion = FindObjectOfType<SeleccionMenu>().Seleccion_unidad;
          }
      
          void OnMouseDown()
          {
              GameObject temp; //guarda el objeto que voy a instanciar.
              Vector3 posicion = this.transform.position; //guarda la posicion a la que di click.
              posicion.y = posicion.y + 0.6f; //suba un poquito la torre en y.
              temp = Instantiate(elementos[Seleccion]); //se crea el objeto torre.
              temp.transform.position = posicion; //se le asigna la posicion a la torre creada(lugar donde se dio click).
              temp.layer = 5; //aparezca en pantalla.
              Destroy(this.gameObject); //destruye la matica en donde se da click.
          }
      
      
      }
      
    • Videos:


Nicolás Alberto Barragán Mena
Pdoo2

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #13 10/05/2019

Post by konicky » Fri May 10, 2019 8:22 am

Asignación de tareas:
Nicolas:
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
  • Corrección Menú inicial.
  • Corrección Drag and Drop para invocar torres y unidades.
¿Que he hecho?
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
¿Que voy a hacer?
  • Corrección Menú inicial.
  • Corrección pooling torres.
¿Que dificultades he tenido?
  • Mi compañero cancelo materia.
Evidencias.
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Codigo:
    • Unidad:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Unidad : MonoBehaviour
      {
          private Animator anim; //controla las transiciones entre animaciones.
          
      
          public float velocidad; //velocidad de movimiento.
      
      
          // Start is called before the first frame update
          void Start()
          {
              anim = GetComponent<Animator>();
              
          }
      
          // Update is called once per frame
          void Update()
          {
              anim.SetBool("Caminando", true); //la unidad esta caminando(de idle a walk).
              transform.position -= Vector3.right * velocidad * Time.deltaTime; //movimiento hacia la izquierda.
          }
      }
      
    • Spawn:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Spawn : MonoBehaviour
      {
      
          public GameObject unidad;
          public Transform[] puntos_invocacion;
          public int oleada;
          public float espera_invocacion;
          public float espera_oleadas;
          public float espera_inicial;
      
      
          // Start is called before the first frame update
          void Start()
          {
              StartCoroutine(InvocacionOleadas());
          }
      
          IEnumerator InvocacionOleadas()
          {
              yield return new WaitForSeconds(espera_inicial);
              while (true)
              {
                  for (int i=0; i<oleada; i++)
                  {
                      int id = Random.Range(0, 3);
                      Instantiate(unidad, puntos_invocacion[id].position, puntos_invocacion[id].rotation);
                      yield return new WaitForSeconds(espera_invocacion);
                  }
      
                  yield return new WaitForSeconds(espera_oleadas);
              }
          }
      
          // Update is called once per frame
          void Update()
          {
              
          }
      }
    • Videos:





Nicolás Alberto Barragán Mena
Pdoo2

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

Re: Stormrage-LosDK

Post by xacarana » Fri May 10, 2019 10:17 am

Image

Muy bien. Cuando grabes los videos, debes ingresar los titulos, descripción, etc. Evitar dejar los textos por defecto. Usar todo el espacio de la pantalla, cierra los demás paneles de unity.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
konicky
Posts: 26
Joined: Tue Jan 22, 2019 2:04 pm

Sprint #14 13/05/2019

Post by konicky » Mon May 13, 2019 10:06 pm

Asignación de tareas:
Nicolas:
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
  • Corrección Menú inicial.
  • Corrección Drag and Drop para invocar torres y unidades.
¿Que he hecho?
  • Corrección programación e implementacion rutas, unidades enemigas y torres.
¿Que voy a hacer?
  • Corrección Menú inicial.
  • Corrección pooling torres.
¿Que dificultades he tenido?
  • Mi compañero cancelo materia.
Evidencias.
  • Imagenes:
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
    Image
  • Videos:




  • Codigos:
    • Cursor Mouse:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class ControlCursor : MonoBehaviour
      {
      
          private SpriteRenderer rend;
          public Sprite cursor1;
          public Sprite cursor2;
          
      
      
          // Start is called before the first frame update
          void Start()
          {
              Cursor.visible = false;
              rend = GetComponent<SpriteRenderer>();
          }
      
          // Update is called once per frame
          void Update()
          {
      
              Vector2 cursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
              transform.position = cursorPos;
      
              if (Input.GetMouseButtonDown(0))
              {
                  rend.sprite = cursor2;
              }else if (Input.GetMouseButtonUp(0))
              {
                  rend.sprite = cursor1;
              }
      
          }
      }
    • Bala:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Bala : MonoBehaviour
      {
      
          private Transform objetivo;
          public float velocidad;
      
          public void Buscar(Transform _objetivo)
          {
              objetivo = _objetivo;
          }
      
          void Update()
          {
              if (objetivo == null)
              {
                  Destroy(gameObject);
                  return;
              }
      
              Vector3 dir = objetivo.position - transform.position;
              float df = velocidad * Time.deltaTime;
      
              if (dir.magnitude <= df)
              {
                  Golpear();
                  return;
              }
      
              transform.Translate(dir.normalized * df, Space.World);
          }
      
          void Golpear()
          {
              Debug.Log("Golpeaste a:" + objetivo.name);
              Destroy(gameObject);
          }
      
      }
    • Torre:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Torre : MonoBehaviour
      {
      
          private Transform objetivo;
          public float rango;
          public string tag_enemigo="Enemigo";
          public float velocidad_disparo;
          private float cronometro_disparo;
          public GameObject bala;
          public Transform punto_disparo;
      
          // Start is called before the first frame update
          void Start()
          {
              cronometro_disparo = 0f;
              InvokeRepeating("BuscarObjetivo", 0f, 0.5f);
          }
      
          // Update is called once per frame
          void Update()
          {
              if (objetivo == null)
                  return;
      
              if (cronometro_disparo <= 0)
              {
                  Disparar();
                  cronometro_disparo = 1f / velocidad_disparo;
              }
      
              cronometro_disparo -= Time.deltaTime;
          }
      
          void BuscarObjetivo()
          {
              GameObject[] enemigos = GameObject.FindGameObjectsWithTag(tag_enemigo);
              float distancia_minima = Mathf.Infinity;
              GameObject enemigo_cercano = null;
              foreach(GameObject enemigo in enemigos)
              {
                  float distancia_enemigo = Vector3.Distance(transform.position, enemigo.transform.position);
                  if (distancia_enemigo < distancia_minima)
                  {
                      distancia_minima = distancia_enemigo;
                      enemigo_cercano = enemigo;
                  }
                  if (enemigo_cercano != null && distancia_minima <= rango)
                  {
                      objetivo = enemigo_cercano.transform;
                  }
                  else
                  {
                      objetivo = null;
                  }
              }
          }
      
          void Disparar()
          {
              Debug.Log("Disparar");
              GameObject balago= (GameObject)Instantiate(bala, punto_disparo.position, bala.transform.rotation);
              Bala proyectil = balago.GetComponent<Bala>();
      
              if (proyectil != null)
              {
                  proyectil.Buscar(objetivo);
              }
          }
      
          void OnDrawGizmosSelected()
          {
              if (objetivo != null)
              {
                  Gizmos.color = Color.blue;
                  Gizmos.DrawLine(transform.position, objetivo.position);
                  Debug.Log("El objetivo es: " + objetivo.name);
              }
          }
      }
      
    • Unidad:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Unidad : MonoBehaviour
      {
          private Animator anim; //controla las transiciones entre animaciones.+
          public GameObject sangre;
          
      
          public float velocidad; //velocidad de movimiento.
      
      
          // Start is called before the first frame update
          void Start()
          {
              anim = GetComponent<Animator>();
              
          }
      
          // Update is called once per frame
          void Update()
          {
              anim.SetBool("Caminando", true); //la unidad esta caminando(de idle a walk).
              transform.position -= Vector3.right * velocidad * Time.deltaTime; //movimiento hacia la izquierda.
          }
      
          void OnTriggerEnter2D(Collider2D col)
          {
              if (col.CompareTag("FinCamino"))
              {
                  Debug.Log("GameObject collided with " + col.name);
                  Destroy(gameObject);
              }
              if (col.CompareTag("Bala"))
              {
                  RecibirDaño();
              }
          }
          public void RecibirDaño()
          {
              Instantiate(sangre, transform.position, Quaternion.identity);
              Debug.Log("Recibiste Daño");
          }
      }
      
    • Spawn:

      Code: Select all

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class Spawn : MonoBehaviour
      {
      
          public GameObject unidad;
          public Transform[] puntos_invocacion;
          public int oleada;
          public float espera_invocacion;
          public float espera_oleadas;
          public float espera_inicial;
          
      
          // Start is called before the first frame update
          void Start()
          {
              StartCoroutine(InvocacionOleadas());
          }
      
          IEnumerator InvocacionOleadas()
          {
              yield return new WaitForSeconds(espera_inicial);
              while (true)
              {
                  for (int i=0; i<oleada; i++)
                  {
                      int id = Random.Range(0, 3);
                      Instantiate(unidad, puntos_invocacion[id].position, puntos_invocacion[id].rotation);
                      yield return new WaitForSeconds(espera_invocacion);
                  }
                  oleada++;
                  yield return new WaitForSeconds(espera_oleadas);
              }
          }
      
          // Update is called once per frame
          void Update()
          {
              
          }
      }
      
Nicolás Alberto Barragán Mena
Pdoo2

Post Reply