Jump to content
Sign in to follow this  
jtorp20

ANSWERED spawner

Recommended Posts

Hola a todos.

Estoy creando un juego 3D en tercera persona y he creado un spawner. Tengo un objeto que es como una piedra tallada, que pretendo clonar para crear varios spawner. En esta piedra esta adjuntado el script siguiente:

public class EnemySpawn : MonoBehaviour
{
  public GameObject lizard;
  void Start()
  {

    StartCoroutine(replicar());

  }

  IEnumerator  replicar()
  {
    while(true)
    {
      Instantiate(lizard, transform.position, transform.rotation);
      yield return new WaitForSeconds(50.0f);
    }
  }
}

Esto funciona bien y el "lizard" que es mi objeto clonado se reproduce perfectamente, en el punto donde esta la piedra. 

Para clonar el lizard, tengo que arrastrar el GameObject "lizard" al espacio correspondiente del inspector, en el script que os he añadido, en la variable public GameObject lizard.

Lo que sucede es que cuando el GameObject original que he arrastrado al script en el inspector, muere, este GameObject es destruido y ya no lo clona el spawner y dejan de salir los lizards.

La solución que he tomado es dejar el GameObject original encerrado en un escondite, de modo que no puede ser destruido en el juego. El juego funciona pero la solución parece poco profesional cuando menos.

He intentado arrastrar directamente el lizard desde la carpeta prefabs hasta su posición en el script del spawner, en lugar de desde herarchy que es como lo tengo ahora, pero el problema es que el lizard tiene un script en que se le indica que se dirija hacia el transform del player, y este transformer no lo coge desde el prefab. 

He intentado describirlo con claridad, aunque creo que la explicación es un poco lio.

Saludos!!!!

Share this post


Link to post
Share on other sites
2 hours ago, jtorp20 said:

...

Lo que sucede es que cuando el GameObject original que he arrastrado al script en el inspector, muere, este GameObject es destruido y ya no lo clona el spawner y dejan de salir los lizards.

La solución que he tomado es dejar el GameObject original encerrado en un escondite, de modo que no puede ser destruido en el juego. El juego funciona pero la solución parece poco profesional cuando menos.

He intentado arrastrar directamente el lizard desde la carpeta prefabs hasta su posición en el script del spawner, en lugar de desde herarchy que es como lo tengo ahora, pero el problema es que el lizard tiene un script en que se le indica que se dirija hacia el transform del player, y este transformer no lo coge desde el prefab. 

He intentado describirlo con claridad, aunque creo que la explicación es un poco lio.

Saludos!!!!

 

Puedes coger el transform del Player en la función Start del Lizard. El codigo vendria a ser algo así: 

ElPlayer = GameObject.FindGameObjectWithTag("Player"); 

Por otro lado, al hacer el spawn con el Instantiate usas muchos recorsos, que si solo instancias un par de objetos no pasa nada, pero como te pongas a spawnear por decenas.... quizás sí que se nota en el rendimiento, lo mejor es trabajar siempre con objetos cacheados. 

Te dejo un vídeo, donde explico como hacer un spawn, y da la posibilidad de trabajar con objetos cacheados, el código del script tambien está disponible en esta dirección http://martra.uadla.com/2020/01/23/creacion-de-un-spawner-para-unity/, puedes usarlo como plantilla para tu spawn. 

Espero que te sirva de algo! 

  • Like 1

Share this post


Link to post
Share on other sites

Por más que intento crear un prefab, al poner una instancia de este en el juego, pierde el transform del player. 

He tomado la solución de Pere, y funciona de lujo. 

Me queda la duda de por qué el prefab pierde el transform al instanciarlo en el juego. Pero usando ElPlayer = GameObject.FindGameObjectWithTag("Player") no tengo el problema.

Gracias de nuevo, por responder.

  • Like 1

Share this post


Link to post
Share on other sites

Me alegro que te funcionase. 

No se si entiendo bien el problema del prefab y el player pre-informado porque no nunca he intentado nada parecido. Pero al crear el prefab no puedes asignarle un objeto en concreto dentro del juego, sino una plantilla. A ver si me explico..... no le puedes asignar tu player, sino decirle que contendrá un objeto de tipo player, pero no es el que tu tienes en la pantalla.

 

  • Like 1

Share this post


Link to post
Share on other sites

Lo tendré en cuenta . Muchas gracias otra vez por la aportación.

  • Like 1

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...