Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Enemigos que entran por la izquierda y por la derecha

Iniciado por Gurumantra, Diciembre 24, 2019, 04:34:37 PM

Tema anterior - Siguiente tema
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.

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.

Diciembre 25, 2019, 02:45:08 PM #2 Ultima modificación: Diciembre 26, 2019, 09:54:17 AM por pioj
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);
        }
    }
}

 
 

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... 

@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
 

 
 
 
2

Diciembre 27, 2019, 02:52:28 AM #5 Ultima modificación: Enero 21, 2020, 04:46:34 PM por nomoregames
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);
        }
    }
}

 
 

Etiquetas: