Noticias

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

Selector random de spawn.

Iniciado por Luxskkz, Enero 21, 2017, 05:39:54 AM

Tema anterior - Siguiente tema
Hola, tengo una consulta enfocada hacia un Game multijugador, por ejemplo si en mi nivel hubieran 10 personas, que tuviera que hacer para que "una" de esas 10 personas spawneara en otra zona distinta del resto donde nadie mas pudiera aparecer hay, siendo mas objetivo la idea es que sin importar de jugadores que hubiera siempre tendría que haber 1 que spawneara apartado del resto, tipo enemigo.

Enero 21, 2017, 06:45:14 AM #1 Ultima modificación: Enero 21, 2017, 06:45:50 AM por lightbug
No se bien si te entendi, osea queres que uno (sin importar quien) haga spawn en un sitio diferente al resto, --> y que dicho jugador se seleccione aleatoriamente?
 
Si tenes a cada Player guardado en una lista, arreglo o cualquier contenedor podes, en el momento de spawnear al "enemigo" , seleccionar aleatoriamente uno de los players haciendo random el indice con el q seleccionas:
 

List<GameObject> listPlayersSinSpawn = new List<GameObject>();
Vector3 lugarBueno;
Vector3 lugarMalo;
bool enemySpawn = false;
 
//sea lo que pase en el juego cuando hay players conectados pero sin estar en el
// nivel los vas agregando aca en la lista
 
//Suponer que cada uno tiene una funcion Spawn
//listPlayers.Count es la cantidad de elementos de la lista
//Random.Range(a,b) a inclusivo , b exclusivo nunca puede tomar el valor b, (sí b-1)
void Spawn(){
  int valorAleatorio = Random.Range(0,listPlayersSinSpawn.Count);
 
  //lo primero que spawnea es el enemigo, luego el resto. En teoria da igual el orden
  // SpawnAt puse asi para diferenciar de esta funcion
 
  if(!enemySpawn)
  {
listPlayers[valorAleatorio].GetComponent<"donde tengas el metodo Spawn">().SpawnAt(lugarMalo);   
     enemySpawn = true;
  }else{
     listPlayers[Random.Range(0,listPlayers.Count)].GetComponent<"donde tengas el metodo Spawn">().SpawnAt(lugarBueno);
  }
     
  //al final lo quitas de la lista
  listPlayers.RemoveAt(listPlayers);
}
 

 
Dentro de esta clase tenes dos zonas habilitadas (dos vector3), una donde van los buenos y otra donde van el malo, Tambien el enemySpawn que indica si ya se realizo el spawn del enemigo.
 
Tambien tene en cuenta que yo considere que cada Players ya estaba instanciado pero en modo dormido (si queres), entonces con el spawn lo revivo y lo situo donde quiero,pero podria ser que no lo esté, en este caso tenes que instanciarlo, pero ya me fui de mambo, eso va mucho mas en como diseñas el gameplay.
 
Saludos
 
Saludos

Etiquetas: