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