光子检测玩家是否已经处于该产卵位置

时间:2015-10-21 17:22:47

标签: c# unity3d unity5 photon

我在一个房间里有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);

3 个答案:

答案 0 :(得分:0)

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

你需要确保你拥有比玩家更多的产卵位置 - 显然。

你也可能想以某种方式每次随机化堆栈。

您可以采用这个概念并使用您想要的任何数据结构,但重要的想法是删除“消耗”元素,直到您准备好重置为止。

答案 1 :(得分: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);
        }
    }
}

答案 2 :(得分: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);