2015-10-21 7 views
0

У меня 3 игрока в комнате и 3 заданных места появления, но хотелось бы, чтобы каждый игрок был порожден в одном из этих положений, а не в том же положении. У меня это есть, но как я могу убедиться, что другой игрок не будет также появляться в этой точке spawnpoint?Фотон обнаружение, если игрок уже находится в этом месте появления.

number = UnityEngine.Random.Range(1, 3); 


if (number == 1) 
{  
    spawnpoint = GameObject.FindWithTag("spawnpoint1"); 
} 


if (number == 2) 
{ 
    spawnpoint = GameObject.FindWithTag("spawnpoint2"); 
} 

if (number == 3) 
{ 
    spawnpoint = GameObject.FindWithTag("spawnpoint3"); 
} 

GameObject myPlayer = PhotonNetwork.Instantiate(playerprefabname, spawnpoint.transform.position, spawnpoint.transform.rotation, 0); 
+0

Вы можете добавить все 3 точки появления к набору и перетасовать набор. Затем перейдите по множеству нереста ваших игроков. Это даст вам случайный набор уникальных точек появления. До тех пор, пока вы не используете один и тот же элемент дважды, он должен дать каждому игроку уникальную точку появления. –

ответ

0

Поместить список доступных мест появления в стек; когда вам нужна новая позиция, вытащите элемент из стека и используйте позиции появления.

Вам необходимо убедиться, что у вас есть больше мест появления, чем игроки - очевидно.

И вы также, вероятно, хотите каким-то образом рандомизировать стек каждый раз.

Вы можете использовать концепцию и использовать любую структуру данных, которую хотите, но важной идеей является удаление «потребляемого» элемента до тех пор, пока вы не будете готовы к сбросу.

+0

Спасибо, нужно будет выяснить, как это сделать сейчас: P – ziggy

0

Вы можете создать массив точек появления и рандомизировать их и создать свой объект там. С помощью этого метода вы можете иметь столько точек появления, сколько хотите, без изменения кода.

using UnityEngine; 
using System.Linq; 

public class Test : MonoBehaviour { 

    [SerializeField] Vector3[] spawnPoints; 
    [SerializeField] GameObject spawnObject; 


    void Start(){ 
     InitRandom(); 
    } 

    void InitRandom(){ 
     System.Random rnd = new System.Random(); 
     Vector3[] items = (
      from i in spawnPoints 
      orderby rnd.Next() 
      select i 
     ).ToArray(); 

     foreach (Vector3 v in items) { 
      Instantiate(spawnObject, v, Quaternion.identity); 
     } 
    } 
}