Electric Sheep - 10th Circle Games

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

Moderator: julianmartinez16

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Fri Mar 06, 2020 10:15 pm

¿Qué se hizo?
-Se acabo el modelo de la plataforma y el puente por el que pasan los enemigos (Pedro)
-Se Paso el modelo a Unity y se comenzaron a agregar los colliders (Pedro)

Modelo del puente finalizado
Image
Se termino de modelar el puente que sirve de plataforma para los enemigos, y se corrigieron unas fallas que llevaba el modelo en sus normales, para que el modelo se pueda ver bien una vez sea exportado a Unity


¿Qué queda por hacer?
-Modelar las plataformas sobre las que se pondrán las torres
-Comenzar a modelar las torretas y enemigos (Pedro)
-Comenzar a programar las torretas y los enemigos haciendo uso de formas básicas de Unity mientras se realizan sus modelos


¿Qué dificultades tuvimos?
-𝓔𝓵 𝓹𝓪𝓷𝓪 𝓷𝓸 𝓶𝓮 𝓻𝓮𝓼𝓹𝓸𝓷𝓭𝓮 𝓵𝓸𝓼 𝓶𝓮𝓷𝓼𝓪𝓳𝓮𝓼 𝓭𝓮𝓵 𝔀𝓹𝓹

Ok, continua con el ejercicio, sigue incluyendo a tu compañero, esperemos que se ponga al día. Mientras tanto es un strike para Felipe. Recuerden que la nota es individual.

Image

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Wed Mar 11, 2020 10:30 pm

¿Qué se hizo?
-Se corrigieron unos problemas que surgieron con el modelo de la plataforma al pasarlo a Unity (Pedro)
-Se realizaron las denotaciones de los diferentes materiales para el modelo de la Plataforma, Puente y Nucleo (Pedro)
-Se comenzó a hacer el sistema de rutas (Pedro)

Modelo de la Plataforma, Puente y Nucleo con indicadores de color/material
Image
Los colores que se ven en la imagen no son los definitivos para el modelo, sino una previsualización de las partes que llevan el mismo color/material, se usaron colores con buen contraste para evitar equivocaciones (dejar caras en el modelo sin el color adecuado al que les pertenece) Posteriormente en Unity se remplazara cada uno de estos colores con su material respectivo


Avance en Unity
Image
Se cuadro la posición y angulo cámara para que cuadrara con el diseño que se tenia planeado desde el comienzo, Se importaron los modelos con sus correcciones y por último se organizo el sistema de nodos

¿Qué queda por hacer?
-Programar los enemigos y las torretas (Pedro)
-Comenzar a modelar las torretas y enemigos (Pedro)
-Comenzar a programar las torretas y los enemigos haciendo uso de formas básicas de Unity mientras se realizan sus modelos (Pedro)



¿Qué dificultades tuvimos?
-El modelo 3d presento ciertos problemas con respecto a sus normales cuando fue exportado a Unity
Last edited by R_to_Restart on Wed Mar 18, 2020 2:11 pm, edited 1 time in total.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Fri Mar 13, 2020 8:25 pm

¿Qué se hizo?
-Se ajustaron los materiales y las luces de ambiente de la plataforma
-Se programo un Script de enemigos y otro que se encarga de darles una ruta a los enemigos
-Se termino el sistema de nodos


Modelo con materiales y luces definidas

-Se remplazaron los materiales y las luces para darle una estética más Sci-Fi Neón al juego, también se le agrego un efecto de Post Processing a la cámara.
-Se programaron las rutas que toman los enemigos a través del sistema de nodos


Script de Enemigo

Code: Select all

public class Enemy : MonoBehaviour
{
    [Header("Path Follow")]
    [SerializeField]
    private GameObject[] nodos;
    [SerializeField]
    private int currNodo;
    [SerializeField]
    private Vector3 target;
    [SerializeField]
    private float speed;

    private Rigidbody rb;

    // Setters & Getters
    public GameObject[] Nodos { get => nodos; set => nodos = value; }

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
        currNodo = 0;

    }

    private void Update()
    {
        Movement();

        if((nodos[currNodo + 1].transform.position - transform.position).magnitude < 0.1f)
        {
            if(currNodo < nodos.Length - 2)
            {
                currNodo++;
            }
            else
            {
                gameObject.SetActive(false);
            }
        }
    }

    private void Movement()
    {
        target = nodos[currNodo + 1].transform.position;
        rb.velocity = (target - transform.position).normalized * speed;

        transform.rotation = Quaternion.LookRotation(target - transform.position, Vector3.up);
    }


    public void SetEnemy(GameObject[] nodos)
    {
        this.nodos = nodos;

        transform.position = nodos[currNodo].transform.position;
        target = nodos[currNodo + 1].transform.position;
    }

}
Script de Nodos

Code: Select all

public class PathFollow : MonoBehaviour
{
    [SerializeField]
    private GameObject[] ruta1;
    [SerializeField]
    private GameObject[] ruta2;

    [SerializeField]
    private Enemy[] enemies;


    private void Start()
    {
        int rand = 0;
        for (int i = 0; i < enemies.Length; i++)
        {
            if (enemies[i] != null)
            {
                rand = Random.Range(0, 2);
                if (rand == 0)
                {
                    enemies[i].SetEnemy(ruta1);
                }
                else if (rand == 1)
                {
                    enemies[i].SetEnemy(ruta2);
                }
            }
        }

    }
¿Qué queda por hacer?
-Programar torretas y sistema de vida de las tropas
-Modelar las torretas con su respectiva plataforma
-Modelar los enemigos

¿Qué dificultades tuve?
-Ninguno, y se corrigieron los problemas del post pasado

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Wed Mar 18, 2020 11:26 pm

¿Qué se hizo?
-Se programo el "spawner" y el sistema de vida de las tropas

Spawner de oleadas (WaveSpawner)

Para los enemigos se usaron esferas de Unity mientras se desarrolla el modelo definitivo, en este momento se tienen dos tipos de unidades Tanque y Minion, con la característica de que la última es más rápida que la otra, esto causa que logre alcanzar a los enemigos tanque y las empuje hasta que logre pasarlas, debido a que ambas llevan un collider. En el momento sé esta pensando una solución para esto que no sea desactivar los colliders para que los enemigo no se traspasen entre ellos


Corrutina SpawnWave

Code: Select all

    public IEnumerator SpawnWave (int enemyAmnt,float delayEnemies ,params EnemyType[] tiposEnemigo)
    {
        for (int i = 0; i < enemyAmnt; i++)
        {
            EnemyType currEnemigo;
            GameObject[] ruta = new GameObject[0];
            GameObject enemigo;

            int rand = Random.Range(0, tiposEnemigo.Length);
            currEnemigo = tiposEnemigo[rand];

            rand = Random.Range(0, 2);
            if(rand == 0)
            {
                ruta = ruta1;
            }
            else if(rand == 1)
            {
                ruta = ruta2;
            }
            
            switch (currEnemigo)
            {
                case EnemyType.Minion:
                    enemigo = Instantiate(prefabMinion);
                    enemigo.GetComponent<Enemy>().SetEnemy(ruta);
                    break;
                case EnemyType.Tanque:
                    enemigo = Instantiate(prefabTanque);
                    enemigo.GetComponent<Enemy>().SetEnemy(ruta);
                    break;
            }
            yield return new WaitForSeconds(delayEnemies);
        }
    }
Por el momento el código permite hacer rondas en orden aleatorio con los tipos de enemigos que uno elija, el número de enemigos y el tiempo de espera entre la instancia de un enemigo a otro

¿Qué queda por hacer?
-Programar torretas
-Modelar las torretas con su respectiva plataforma
-Modelar los enemigos
-Modificar el script del EnemySpawner un poco para que las rondas sean "Scripted" ya que me parece una mecánica más pertinente para el diseño del juego

¿Qué dificultades tuve?
-La colisión entre tropas, de la que hable anteriormente en este post
Last edited by R_to_Restart on Sun Mar 22, 2020 11:31 am, edited 5 times in total.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Sat Mar 21, 2020 11:02 am

¿Qué se hizo?
-Se comenzaron a programar las torretas
-Se inicio el proceso de modelaje de uno de los enemigos

Script de las torretas

Code: Select all

public class Turret : MonoBehaviour
{
    
    [SerializeField]
    private float range;
    [SerializeField]
    private float damage;
    [SerializeField]
    private float rate;
    [SerializeField]
    private float bulletSpeed;
    [SerializeField]
    private GameObject bulletPrefab;

    private GameObject targetEnemy;


    private void Start()
    {
        StartCoroutine(ShootingLoop());
    }

    private void Update()
    {
        targetEnemy = GetNearestEnemy();

    }

    private void ShootEnemy()
    {
        GameObject bala = Instantiate(bulletPrefab, transform.position, transform.rotation);
        bala.GetComponent<Bullet>().SetBullet(targetEnemy, bulletSpeed, damage);
    }

    private GameObject GetNearestEnemy()
    {
        if (GameObject.FindGameObjectsWithTag("Enemy").Length > 0)
        {
            GameObject[] allEnemies = GameObject.FindGameObjectsWithTag("Enemy");

            float minDist = (allEnemies[0].transform.position - transform.position).magnitude; // Distancia entre torreta y primer enemigo: Restando ambas posiciones da un Vector3 y la magnitud es la distancia
            int nearestIndex = 0; // Indice en el array allEnemies para el enemigo más cercano

            for (int i = 1; i < allEnemies.Length; i++)
            {
                if ((allEnemies[i].transform.position - transform.position).magnitude < minDist)
                {
                    minDist = (allEnemies[i].transform.position - transform.position).magnitude;
                    nearestIndex = i;
                }
            }

            return allEnemies[nearestIndex];
        }
        else
        {
            return null;
        }
    }

    private IEnumerator ShootingLoop()
    {
        while (true)
        {
            if (targetEnemy != null)
            {
                if ((targetEnemy.transform.position - transform.position).magnitude < range)
                {
                    ShootEnemy();
                }
            }

            yield return new WaitForSeconds(1f / rate);
        }

    }

}
Modelo 3d del Enemigo "Minion"
Image
Se comenzó el modelo del enemigo Minion, que será el primer enemigo introducido en el juego y el que llevara menos vida, queda faltando ajustar las secciones que llevan diferentes materiales y revisar que las normales de las caras estén en el sentido apropiado para que no tenga problemas el modelo en Unity


¿Qué queda por hacer?
-Modelar el resto de los enemigos
-Modelar las torretas
-Diseñar un HUD para el juego

¿Qué dificultades tuve?
-Montar el Sprint a tiempo ya que se agruparon varios trabajos de otras materias y no tengo un compañero de equipo que me releve en estos casos :roll:
Last edited by R_to_Restart on Fri Apr 03, 2020 1:35 pm, edited 5 times in total.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Wed Mar 25, 2020 11:09 pm

¿Qué se hizo?
-Se siguió trabajando en el Script de las torretas.

Script de las balas de las torretas

Code: Select all

public class Bullet : MonoBehaviour
{
    private GameObject enemy;

    public void SetBullet(GameObject target, float speed, float damage)
    {
        enemy = target;
        float aproxTime = (target.transform.position - transform.position).magnitude / speed; // Calcula el tiempo aproximado en llegar (distancia/velocidad)
        StartCoroutine(MakeDamage(aproxTime, damage)); // Empieza la corutina con la información del tiempo aproximado y el daño
        GetComponent<Rigidbody>().velocity = target.transform.position - transform.position; // Define la velocidad inicial
    }    

    private IEnumerator MakeDamage(float delay, float damage)
    {
        yield return new WaitForSeconds(delay);
        enemy.GetComponent<Enemy>().MakeDamage(damage);
        Destroy(gameObject);
    }
}
Modelo 3d del Enemigo "Probe"
Image
Se termino de modelar el enemigo Probe, queda faltando corregir las normales y ajustar las secciones que llevan diferentes materiales


¿Qué queda por hacer?
-Modelar el resto de los enemigos
-Modelar las torretas
-Diseñar un HUD para el juego

¿Qué dificultades tuvimos?
-Problemas con el modificador de "Mirror" en Blender para desarrollar el mesh
Last edited by R_to_Restart on Fri Apr 03, 2020 1:36 pm, edited 5 times in total.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Fri Mar 27, 2020 11:49 pm

¿Qué se hizo?
-Se modifico el script de GameManager para que permitiera cuadrar los enemigos deseados y su orden en cada una de las oleadas.
-Se arreglaron las normales en los modelos de los enemigos y se les asigno las áreas que llevan diferentes materiales.
-Se modelo el enemigo "Walker".

Script de GameManager

Code: Select all

public enum EnemyType
{
    Minion,
    Tanque,
    None
}

[System.Serializable]
public class Wave
{
    [SerializeField, HideInInspector] private string name;

    public float delay = 1; // default: 1
    public EnemyType[] enemies;

    public void SetName(int index)
    {
        name = "Wave " + index;
    }
}

public class GameManager : MonoBehaviour
{
    [Header("Components")]
    [SerializeField]
    private EnemySpawner spawner;
    [Header("Waves")]
    [SerializeField]
    private Wave[] waves;
    [Header("Info")]
    [SerializeField]
    private bool waveCleared;
    [SerializeField]
    private int nextWave;
    [SerializeField]
    private bool gameEnded;

    private void Update()
    {
        if (IsWaveCleared() && spawner.IsWaveFinished)
        {
            spawner.IsWaveFinished = false;
            StartCoroutine(GoToNextWave());
        }

        if (waveCleared)
        {
            waveCleared = false;

            StartCoroutine(spawner.SpawnWave(waves[nextWave].delay, waves[nextWave].enemies));
            if (nextWave < waves.Length - 1)
            {
                nextWave++;
            }
            else
            {
                gameEnded = true;
            }
        }
    }

    private bool IsWaveCleared() // Are all enemies defeated?
    {
        if (GameObject.FindGameObjectsWithTag("Enemy").Length == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private IEnumerator GoToNextWave()
    {
        if (!gameEnded)
        {
            print("Wave " + (nextWave + 1) + " incoming, get ready!");
            yield return new WaitForSeconds(5);
            waveCleared = true;
        }
        else
        {
            print("Game ended, you win!");
        }
    }
Modelos 3d de enemigos terminados
Image
Se termino el modelo del enemigo Walker y se verificaron que las normales de las caras estuvieran en el sentido adecuado y se les asigno las áreas donde llevan diferentes materiales a el resto de los modelos
PD: Estos no son los colores definitivos de los modelos


¿Qué queda por hacer?
-Modelar el resto de los enemigos
-Modelar las torretas
-Diseñar un HUD para el juego

¿Qué dificultades tuvimos?
-Tuve problemas para desarrollar las modificaciones para el script del GameManager por lo que acudí a un compañero, el cual me recomendó el uso de clases serializables y me ayudo a implementarlas.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Wed Apr 01, 2020 11:32 pm

¿Qué se hizo?
-Se adelantó una gran parte del juego para la pre entrega
-Se exportaron los modelos de los enemigos a Unity y se animaron
-Se programó la vida del núcleo y el daño que inflige cada uno de los enemigos a este
-La presentación para la pre entrega
-Se revisó el estado de las tareas del BackLog


Presentación de la Pre-entrega



¿Qué queda por hacer?
- Implementar el sistema de dinero
-Modificar el HUD para que cuadre más con el resto del juego
-Organizar parte del UI
-Modelar las torretas

¿Qué dificultades tuve?
- Problemas con la visualización de los rangos de las torretas
Last edited by R_to_Restart on Sat May 02, 2020 1:27 pm, edited 1 time in total.

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Sat Apr 04, 2020 12:19 am

¿Qué se hizo?
-Se actualizo el Backlog y se modifico el video del gameplay

Actualización del Backlog
Image

¿Qué queda por hacer?
-Programar el sistema económico
-Modelar las torres

¿Qué dificultades tuve?
-No alcanzar a tener los modelos de la torretas para la pre-entrega

User avatar
R_to_Restart
Posts: 18
Joined: Wed Feb 05, 2020 9:42 pm

Re: Electric Sheep - 10th Circle Games

Post by R_to_Restart » Wed Apr 15, 2020 10:45 am

¿Qué se hizo?
-Se modelaron las 5 torretas


Modelos 3D de las torretas
Image
Se modelo cada una de las torretas, se ajusto el sentido de sus caras y se designaron las áreas que llevan diferentes materiales

¿Qué queda por hacer?
-programar sistema económico
-mejorar el HUD

¿Qué dificultades tuve?
-ninguno

Post Reply