Jump to content
Gurumantra

ANSWERED Enemigos que entran por la izquierda y por la derecha

Recommended Posts

Amigos, estoy haciendo un pequeño juego de plataformas tipo Metroid de Snes y quiero que los enemigos entren por el lado izquierdo y derecho de la pantalla. alguna idea de código que haga esto?? a el player esta en el centro y soporta las oleadas.

Share this post


Link to post
Share on other sites

No das mucha información sobre qué quieres exactamente, así que vamos a lo básico:

Creas  un GameObject que tenga un Script asociado, que será el "spawner" ó lanzador de enemigos. Crea uno para cada lado...

 

En el script, haces que cada X tiempo, se instancie un GameObject usando el prefab que le pasarás como parámetro, y luego que dicho clon se mueva hacia el Player, o bien vaya hacia una dirección concreta.

El "timer" es un simple contador. Cada X tiempo, se instancia y se resetea el contador a 0.

Share this post


Link to post
Share on other sites

Aqui te dejo el código. Donde esta el comentario (//) lo dejé así porque el prefab se no va hacia el centro, donde esta el player y ademas queda en mirando hacia el sentido contrario, no se como hacer eso, que vaya hasta el player y que haga un flip para que quede mirando al player.

public class Spawn : MonoBehaviour
{
    
    public GameObject enemyPrefab;
    // Start is called before the first frame update
    void Start()
    {
        
        StartCoroutine(EnemySpawnRutine());
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator EnemySpawnRutine()
    {
        while(true)
        {
            Instantiate(enemyPrefab, new Vector3(9f, 0, 0), Quaternion.identity);
            //Instantiate(enemyPrefab, new Vector3(-9f, 0.75f, 0), Quaternion.identity);
            yield return new WaitForSeconds(5f);

        }
    }
}

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

puedes usar random range, que devuelve un valor añeatorio comprendido entre los dos que le digas...

si porejemplo quieres que un 50% de los enemigos aparezacan por la derecha y los otros aparezcan por el otro lado puedes hacer algo asi:

if (Random.Range(0f, 100f) > 50f) {
    //aparecer por la derecha
} else { 
    //aparecer por la izquierda
}

luego deverias rotata los enemigos hacia el lado correcto... para ello al instanciarlos deberias guardar (temporalmente) la variable del enemigo para luego rotarlo... algo asi:

GameObject ene = (GameObject)Instantiate(enemy, position, Quaternion.identity);
//y ahora lo roto 180 grados
ene.transform.Rotate(0, 180, 0);

espero que te sirva... no has dicho si era 2d o 3d... 

  • Like 1

Share this post


Link to post
Share on other sites

@Igor El juego es en 2D y la idea que sean oleadas de enemigos tanto por la izquierda como por la derecha.

Tu código sirio super bien solo que, como muestra la imagen 2, todos caminan y miran hacia la misma dirección. use el ene.transform.Rotate pero no funciono.

1

Captura de Pantalla 2019-12-26 a la(s) 18.27.12.png

 

2

Captura de Pantalla 2019-12-26 a la(s) 18.40.45.png

Share this post


Link to post
Share on other sites

Ya lo resolví. muchas gracias, no saben cuantos me ayudaron en milenio proceso de aprendizaje.

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

public class Spawn : MonoBehaviour
{
    
    public GameObject[] enemyPrefab;
    
    // Start is called before the first frame update
    void Start()
    {
        
        StartCoroutine(EnemySpawnRutine());
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    IEnumerator EnemySpawnRutine()
    {
        while (true)
        {
            if (Random.Range(-10f,10f) < 1)
            {

                int Enemys = Random.Range(0, 3);
                Instantiate(enemyPrefab[Enemys], new Vector3(9f, 0, 0), Quaternion.identity);
            }
         else
            {
                int Enemys = Random.Range(0, 3);
                GameObject enemy = Instantiate(enemyPrefab[Enemys], new Vector3(-9f, 0, 0), Quaternion.identity);
                enemy.transform.Rotate(0, 180, 0);

            }

            
       
            yield return new WaitForSeconds(5f);

        }
    }
}

 

Share this post


Link to post
Share on other sites

×
×
  • Create New...