No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
1 Hrs
6 Min
58 Seg

Creación de ítems para el jugador

21/41
Recursos

Aportes 8

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para tener el radio del spawn mejor controlado:

Podemos apoyarnos del evento OnDrawGizmos.

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, spawnRadius);
    }

El cual nos dibujara un gizmo en la vista del editor de Unity del circulo en el cual se pueden instanciar nuestros objetos.
Parametros:

Posición del centro del circulo(En este caso, la posición de mi spawn system)
Tamaño del radio(En este caso, la misma variable que multiplica al Random.insideUnitCircle)

En el script de ItemSpawner, hace falta un pequeño detalle y es que el Checkpoint siempre se va a estar generando en el Transform de su prefab. En dado caso que este en el origen, el spawner siempre creara un checkpoint en el radio dado en su origen.

Para que el checkpoint spawnee alrededor del ItemSpawner es necesario sumar al Vector2 randomPosition el transform.position. Quedaria de la siguiente manera la rutina:

 IEnumerator SpawnCheckpointRoutine()
    {
        while (true)
        {
            yield return new WaitForSeconds(checkPointsSpawnDelay);
            Vector2 randomPosition = (Vector2)transform.position + Random.insideUnitCircle * spawnRadius;
            Instantiate(checkPointPrefab, randomPosition, Quaternion.identity);
        }
    }

El contenido del curso es bueno, pero le falta tenica para enseñar. Un claro ejemplo de lo que digo es la mala practica de ponerle knob en todos los sprites (no costaria nada irlos poniendo miestras se crean las entidades)

Aproveché y apliqué el método del spawner de items para que el Spawner de enemigos tenga el mismo tipo de funcionamiento para cada uno de los SpawnPoints, también apliqué el Gizmo del comentario de Ricardo Rito Anguiano.

Yo realizo el proceso de selección de SpawnPoint dentro del EnemySpawner porque me parece más indicado que desde el enemigo.

Este sería mi código:

    [SerializeField] GameObject[] enemyPrefab = new GameObject[2];
    List<GameObject> spawnPoints = new List<GameObject>();
    float spawnTime = 3;
    float radius = 2;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(SpawnNewEnemy());
        spawnPoints.AddRange(GameObject.FindGameObjectsWithTag("SpawnPoint"));
    }

    IEnumerator SpawnNewEnemy()
    {
        while (true)
        {
            yield return new WaitForSeconds(spawnTime);
            float random = Random.Range(0.0f, 1.0f);
            int index = random < GameManager.sharedInstance.difficulty * 0.1f ? 1 : 0;
            GameObject randomSpawnPoint = spawnPoints[Random.Range(0, spawnPoints.Count)];
            Vector2 randomPos = Random.insideUnitCircle * radius + (Vector2)randomSpawnPoint.transform.position;
            Instantiate(enemyPrefab[index],randomPos,Quaternion.identity);
        }
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;

        foreach(GameObject spawnPoint in spawnPoints)
        {
            Gizmos.DrawWireSphere(spawnPoint.transform.position,radius);
        }
    }

Al momento de hacer una variable pública, haces que esta automáticamente, se serialice en el editor de Unity.

A pesar de tener serializadas las variables que son public, tenemos que utilizar El Serialize Field en las variables que no vayana a utilizar otros objetos, por buenas prácticas.

No quieres tener números mágicos en el tu código (Referente a números sin justificación)

Genial