0

我在一个房间里有 3 名玩家,并设置了 3 个生成位置,但希望每个玩家生成在这些位置之一,而不是在同一个位置。我有这个,但是我怎样才能确保另一个玩家不会在这个出生点生成呢?

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);
4

3 回答 3

0

将可用生成位置列表放入堆栈中;当您需要一个新位置时,将项目从堆栈中弹出并使用该生成位置。

你需要确保你的生成位置比玩家多——显然。

而且您可能还希望每次都以某种方式随机化堆栈。

您可以采用该概念并使用您喜欢的任何数据结构,但重要的想法是删除“已使用”元素,直到您准备好重置。

于 2015-10-21T18:18:04.890 回答
0

您可以尝试获取连接到房间的玩家数量并使用该数字来选择特定的生成点。

像这样的东西-

var playerID = PhotonNetwork.otherPlayers.Length;
var player = PhotonNetwork.Instantiate(name, spawns[playerID].transform.position, spawns[playerID].transform.rotation, 0);
player.name = "Player " + (playerID + 1);
于 2018-04-10T10:42:02.413 回答
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);
        }
    }
}
于 2015-10-22T00:43:25.847 回答