Daily
Viernes, 15 de Marzo.
¿Qué hemos hecho?
Hemos arreglado la gran mayoría de los errores tales como con la barra de vida, disparo de las torres, destrucción de enemigos, gracias a la ayuda de un compañero de estudio e implementado.
Se dejo de implementar el contador de monedas planeado por otra metodología basada en texto de UI.
¿Qué haremos?
Se continuará con la corrección de errores.
Se continuará con la correcta implementación del contador de monedas.
¿Qué dificultades han tenido?
Se desconoce el método de poder destruir algo, pero que se pueda volver a reutilizar luego. Esta mecánica es fundamental para la mejora de scripts del juego y futuros scripts.
Evidencias
Scripts modificados:
Unidad
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Unidad : MonoBehaviour
{
public GameObject ruta;
private Vector3 posisicion_inicial;
private Vector3 posicion_siguiente;
public float Vida = 100f;
private float vel = .5f;
private float distancia_punto = 0.5f;
private int indice;
private bool esta_viva;
// Start is called before the first frame update
void Start()
{
esta_viva = true;
posisicion_inicial = this.transform.position;
posicion_siguiente = ruta.transform.GetChild(0).position;
}
// Update is called once per frame
void Update()
{
Vector3 dir;
if (esta_viva == true)
{
dir = posicion_siguiente - this.transform.position;
dir.z = 0;
this.transform.position += dir * vel * Time.deltaTime;
if (dir.magnitude <= distancia_punto)
{
if (indice + 1 < ruta.transform.childCount)
{
indice++;
posicion_siguiente = ruta.transform.GetChild(indice).position;
//Debug.Log("xs" + posicion_siguiente.x + "ys" + posicion_siguiente.y);
}
else
{
indice = 0;
this.transform.position = posisicion_inicial;
posicion_siguiente = ruta.transform.GetChild(0).position;
}
}
}
if(Vida <= 0)
{
esta_viva = false;
Destroy(gameObject, 0.3f);
}
}
private void OnTriggerEnter2D(Collider2D otro)
{
if(otro.gameObject.tag == "bala")
{
Destroy(otro.gameObject);
this.Vida -= otro.gameObject.GetComponent<Bala>().Dano;
}
}
public bool Esta_viva
{
get
{
return esta_viva;
}
set
{
esta_viva = value;
}
}
}
Torre
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Torre : MonoBehaviour
{
private GameObject enemigo;
private bool esta_activa;
public GameObject bala;
public float Dano=10f;
private float distancia_umbral = 2f;
public GameObject Enemigo
{
get
{
return enemigo;
}
set
{
enemigo = value;
}
}
public bool Esta_activa
{
get
{
return esta_activa;
}
set
{
esta_activa = value;
}
}
// Start is called before the first frame update
void Start()
{
}
void Update()
{
Enemigo = BuscarEnemigoCercano();
if (Enemigo!= null)
{
Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.yellow);
}
float dist = (enemigo.transform.position - this.transform.position).magnitude;
if (dist <= distancia_umbral)
{
Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.green);
Disparar();
}
}
void Disparar()
{
GameObject obj = Instantiate(bala, this.transform.position, Quaternion.identity);
Bala bal = obj.GetComponent<Bala>();
bal.ActivarBala(this);
}
GameObject BuscarEnemigoCercano()
{
ArrayList enemigos = PoolingUnidades.unidades;
foreach(GameObject item in enemigos)
{
if (Vector3.Distance(item.transform.position, this.transform.position) < distancia_umbral);
{
return item;
}
}
return null;
}
}
LogicaBarra
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LogicaBarra : Unidad
{
public GameObject enemigo;
public GameObject barra_verde;
public GameObject barra_roja;
float vidaInicio;
float vidaActual;
float escala = 0.001f;
float escala2 = 0f;
SpriteRenderer sr;
// Start is called before the first frame update
void Start()
{
sr = barra_verde.GetComponent<SpriteRenderer>();
vidaInicio = enemigo.GetComponent<Unidad>().Vida;
vidaActual = vidaInicio;
}
// Update is called once per frame
void Update()
{
escala = (vidaInicio - vidaActual) / 100f;
if (sr.transform.localScale.x > 0)
{
sr.transform.localScale -= new Vector3(escala, 0);
escala2 -= 1.85f*escala;
//barra_roja.transform.position = enemigo.transform.position - new Vector3(enemigo.transform.position.x - 3.0f, -.4f);
}
barra_verde.transform.position -= new Vector3(10* escala, 0);
barra_verde.transform.position = enemigo.transform.position - new Vector3(.3f - sr.bounds.size.x / 2, -.4f);
barra_roja.transform.position = enemigo.transform.position - new Vector3(.3f + escala2 - sr.bounds.size.x / 2, -.4f);
vidaInicio = vidaActual;
vidaActual = enemigo.GetComponent<Unidad>().Vida;
}
}
Bala
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bala : MonoBehaviour
{
private GameObject objetivo;
private float velocidad = 0.5f;
public float Dano { get; set; }
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 direccion;
if (objetivo != null)
{
direccion = objetivo.transform.position - this.transform.position;
this.transform.position += velocidad * direccion * Time.deltaTime;
}
}
public void ActivarBala(Torre torre)
{
objetivo = torre.Enemigo;
Dano = torre.Dano;
}
}
Nuevo Script: Contador_Texto
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Contador_Texto : MonoBehaviour
{
public Text contadorText;
private int contador;
// Start is called before the first frame update
void Start()
{
contador = 0;
SetContadorText();
}
// Update is called once per frame
void Update()
{
}
private void OnTriggerEnter2D(Collider2D otro)
{
if (otro.gameObject.CompareTag("Vivo"))
{
otro.gameObject.SetActive(false);
contador = contador + 1;
SetContadorText();
}
}
void SetContadorText()
{
contadorText.text = "Score: " + contador.ToString();
}
}
