Atar Studio - Suit Tower

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

Moderator: julianmartinez16

User avatar
santgoc
Posts: 6
Joined: Tue Jul 16, 2019 6:26 am

Re: Atar Studio - Suit Tower

Post by santgoc » Tue Aug 27, 2019 6:59 pm

Sprite#6
  • Modelado- terminar la torre con el cañón (Santiago Garcia O)
  • Sprite torres apunte automático(Camilo Sanchez
Santiago Garcia O- Estudiante de programación y diseño orientado a objetos

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

Re: Atar Studio - Suit Tower

Post by xacarana » Fri Aug 30, 2019 6:32 am

No hubo avance la clase pasada, Strike dos.

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

User avatar
camilosanchez
Posts: 27
Joined: Tue Jan 22, 2019 6:20 am

Re: Atar Studio - Suit Tower

Post by camilosanchez » Fri Aug 30, 2019 5:30 pm

¿Qué hemos hecho?
Se hizo la creación del script necesario para controlar el movimiento de rotacion de las torretas, ademas de el script necesario para el apuntado automatico de las torretas.


¿Qué vamos a hacer?
Vamos a comenzar a trabajar en los disparos de la torreta.

¿Qué dificultades hemos tenido?
Pasar el archivo desde blender a unity no siempre nos funciona.

Codigo torreta:

Code: Select all

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

public class Turret : MonoBehaviour
{

    private Transform target;
    private float range = 15f;
    private string enemyTag = "Enemy";
    public Transform partToRotate;
    private float turnSpeed = 10f;

    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating("UpdateTarget", 0f, 0.5f); //Incova el metodo UpdateTarget cada 0.5 segundos, desde el segundo 0.
    }

    void UpdateTarget()
    {
        GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag); //Sirve para localizar todos los enemigos.
        float shortestDistance = Mathf.Infinity;
        GameObject nearestEnemy = null;
        foreach (GameObject enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position); //Guardamos la distancia de cada enemigo que encontremos en un float.
            if (distanceToEnemy < shortestDistance) //Condicional para verificar si la distancia del enemigo es menor que cualquier otra distancia encontrada anteriormente.
            {
                shortestDistance = distanceToEnemy; //Igualamos la distancia mas corta, con las distancia del enemigo.
                nearestEnemy = enemy; //Asi sabemos cual es el enemigo mas cercanos que hemos encontrado hasta el momento.
            }
        }

        if (nearestEnemy != null && shortestDistance <= range) //Condicional para verificar que el enemigo mas cercano no sea nulo y que su distancia este en el rango.
        {
            target = nearestEnemy.transform; //Igualamos la variable target con la posición del enemigo mas cercano.
        }
        else
        {
            target = null;
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (target==null) //Condicional para verificar si el target no es nulo, en caso de que sea nulo, el metodo retorna sin hacer nada.
        {
            return;
        }

        //Sistema de apuntado automatico
        Vector3 dir = target.position - transform.position; //Igualamos la direccion de nuestro objetivo con respecto a la diferencia de la nuestra.
        Quaternion lookRotation = Quaternion.LookRotation(dir); //Igualamos la direccion con una rotacion usanado la funcion matematica de unity Quaternion.
        Vector3 rotation = Quaternion.Lerp(partToRotate.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles; //Con el lerp indicamos que parte queremos rotar, hacia donde la queremos rotar, el tiempo en el que queremos que haga la rotacion y luego la convertimos a angulos de euler.
        partToRotate.rotation = Quaternion.Euler (0f, rotation.y, 0f); //Rotamos la parte de la torreta unicamente en el angulo Y.
    }

    void OnDrawGizmosSelected () //Metodo para activar un gizmo cuando seleccionamos la torreta.
    {
        Gizmos.color = Color.red; //Que sea de color rojo.
        Gizmos.DrawWireSphere (transform.position, range); //Con forma de esfera ubicado en la posicion de la torreta y con su respectivo rango.
    }
}
Camilo Sánchez
Estudiante Ing. De Entretenimiento Digital

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

Re: Atar Studio - Suit Tower

Post by xacarana » Tue Sep 10, 2019 7:32 am

Image

Strike Proyecto abandonado, faltan los avances, la planeación del sprint. No vinieron a clase. :cry:
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
camilosanchez
Posts: 27
Joined: Tue Jan 22, 2019 6:20 am

Re: Atar Studio - Suit Tower

Post by camilosanchez » Tue Sep 10, 2019 10:53 am

¿Qué hemos hecho?
Desarrollamos el script necesario para el movimiento de los proyectiles, además de crear un sistema de particulas para la destrucción del proyectil cuando conecta con el enemigo.



Codigo proyectil:

Code: Select all

using UnityEngine;

public class Bullet : MonoBehaviour
{

    private Transform target;

    [SerializeField] private float speed = 70f;
    [SerializeField] private GameObject impactEffect;

    public void Seek(Transform _target)
    {
        target = _target;
    }

    // Update is called once per frame
    void Update()
    {
        if (target == null)
        {
            Destroy(gameObject);
            return;
        }

        Vector3 dir = target.position - transform.position; //Un vector para la distancia hasta el objetivo.
        float distanceThisFrame = speed * Time.deltaTime; //La velocidad a la que se va mover el proyectil en el tiempo.

        if (dir.magnitude <= distanceThisFrame) //Condicional para cuando la distancia al objetivo, es menor o igual a la velocidad del proyectil.
        {
            HitTarget();
            return;   
        }

        transform.Translate(dir.normalized * distanceThisFrame, Space.World); //Un trasnform para el movimiento del proyectil hacia el objetivo.
    }

    void HitTarget() //Metodo para cuando el proyectil hace contacto con el objetivo.
    {
        GameObject effectIns = (GameObject)Instantiate(impactEffect, transform.position, transform.rotation); //Creamos un objeto de juego para el effecto del sistema de particulas.
        Destroy(effectIns, 2f); //Destruye el sistema de particulas luego de dos segundos.
        Destroy(target.gameObject); //Destuye el enemigo objetivo.
        Destroy(gameObject); //Destruye el proyectil.
    }
}

¿Qué vamos a hacer?
Vamos a crear el script necesario para la construción de las torretas.

¿Qué dificultades hemos tenido?
Las torretas que creamos por medio de blender no nos estan funcionando en unity.

GitHub
https://github.com/cmilo1357/Atar-Estudio
Camilo Sánchez
Estudiante Ing. De Entretenimiento Digital

User avatar
santgoc
Posts: 6
Joined: Tue Jul 16, 2019 6:26 am

Re: Atar Studio - Suit Tower

Post by santgoc » Thu Sep 12, 2019 9:04 pm

Sprite#7
  • Modelado de Personajes (guardianes)- Santiago Garcia O
  • Codificacion de los enemigos -Camilo Sanchez
Santiago Garcia O- Estudiante de programación y diseño orientado a objetos

User avatar
camilosanchez
Posts: 27
Joined: Tue Jan 22, 2019 6:20 am

Re: Atar Studio - Suit Tower

Post by camilosanchez » Thu Sep 12, 2019 10:05 pm

¿Qué hemos hecho?
Desarrollamos dos scripts, uno para los nodos donde construiremos las torretas y otro para el manejo de la construcción de las torretas.



Script Nodos:

Code: Select all

using UnityEngine;

public class Node : MonoBehaviour
{

    [SerializeField] private Color hoverColor;
    [SerializeField] private Vector3 positionOffset;
    private Color startColor;
    private Renderer rend;
    private GameObject turret;

    private void Start() 
    {
        rend = GetComponent<Renderer>(); //Obtiene el componente de renderer y lo guarda en una variable.
        startColor = rend.material.color; //Guarda el color incial del nodo.
    }

    private void OnMouseDown() //Metodo para cuando se presiona el click sobre el collider.
    {
        if (turret != null)
        {
            Debug.Log("No se puede construir aqui! - TODO: Mensaje en pantalla.");
            return;
        }
        GameObject turretToBuild = BuildManager.instance.GetTorretToBuild(); //Accede a nuestra clase build manager y llama el metodo el cual almacena la torreta elegida.
        turret = (GameObject)Instantiate(turretToBuild, transform.position + positionOffset, transform.rotation); //Metodo para instanciar la torreta elegida.
    }

    void OnMouseEnter() //Metodo para cuando se entra en el collider.
    {
        rend.material.color = hoverColor; //Activa el color establecido en unity.
    }

    private void OnMouseExit() //Metodo para cuando se sale del collider.
    {
        rend.material.color = startColor; //Devuelve el color incial del nodo.
    }

}
Script BuildManager:

Code: Select all

using UnityEngine;

public class BuildManager : MonoBehaviour
{

    [SerializeField] private GameObject standardTurretPrefab;
    private GameObject torretToBuild;
    public static BuildManager instance; //Variable para poder acceder al buildmanager desde las otras clases.
    private void Awake() 
    {
        if (instance != null) //Condicional para verificar que no haya mas de un build manager en escena.
        {
            Debug.LogError("Hay mas de un build manager en escena!");
            return;
        }

        instance = this; //Igualamos la variable instance a este buildmanager.
    }

    private void Start() 
    {
        torretToBuild = standardTurretPrefab;
    }

    public GameObject GetTorretToBuild()
    {
        return torretToBuild;
    }

}
¿Qué vamos a hacer?
Vamos a terminar de pulir la camara del juego además de continuar en el diseño de los personajes del juego.

¿Qué dificultades hemos tenido?
Aún tenemos problemas usando contenido de blender en unity.

GitHub:
https://github.com/cmilo1357/Atar-Estudio/tree/master
Camilo Sánchez
Estudiante Ing. De Entretenimiento Digital

User avatar
santgoc
Posts: 6
Joined: Tue Jul 16, 2019 6:26 am

Re: Atar Studio - Suit Tower

Post by santgoc » Fri Sep 13, 2019 12:45 am

Santiago Garcia O- Estudiante de programación y diseño orientado a objetos

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

Re: Atar Studio - Suit Tower

Post by xacarana » Tue Sep 17, 2019 6:33 am

Image

Recuerden incluir las referencias de donde se están apoyando para realizar el proyecto, ya que en su avance se ve un juego idéntico a un tutorial, seguir el tutorial esta bien, pero lo importante son dos cosas:
  1. Comprender muy bien todo el código, recuerden que pueden incluir comentarios para recordar que pasa en las sentencias principales.
  2. Personalizar y darle un estilo propio al juego
Muy importante además poner la planeación del siguiente sprint, con las asignaciones respectivas para cada integrante del equipo. El día de hoy no asistieron a clase. :(

Quedo pendiente de la publicación con el avance del día de hoy, recuerden que uno de los entregables es el diagrama de clases, junto con las demás recomendaciones que les hice a la presentación.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
camilosanchez
Posts: 27
Joined: Tue Jan 22, 2019 6:20 am

Re: Atar Studio - Suit Tower

Post by camilosanchez » Thu Sep 19, 2019 9:51 pm

Camilo Sánchez
Estudiante Ing. De Entretenimiento Digital

Post Reply