[大家好,我正尝试使用Photon Networking for Unity制作RTS游戏。我要做什么取决于特定房间中的玩家(在此示例中为2),所有玩家在不同的位置生成。我遇到的麻烦是制作一个在游戏开始并调用PhotonNetwork.Instantiate
时在不同位置而不是在同一位置生成玩家的系统。我如何使用带有列表的SpawnPositions来检查玩家是否已经在给定位置生成,如果是,那么它将在下一个生成,我希望如果您需要知道其他任何内容,我希望我涵盖了所有内容。
private GameObject playerPrefab; // Players Prefab
[SerializeField]
public Transform[] SpawnPositions; // 2 Spawn Positions in The unity Heirarchy
public List<Vector3> spawnPoints = new List<Vector3>(); // List of spawnpoints to add to
void Start()
{
PhotonNetwork.Instantiate(playerPrefab.name, [what to do here], Quaternion.Euler(0, 0, 0));
}
您可以生成衍生点。我使生成点自动找到合适的高度。如果不需要自动高度,则可以使用空的MonoBehaviour甚至使用标签。您可以使用此脚本在不同位置制作多个GameObject。
...
public class spawnPoint : MonoBehaviour {
public bool autoHeight = true;
public LayerMask putOnTopOfThese;
// Use this for initialization
void Start () {
RaycastHit hit;
Physics.Raycast (transform.position + Vector3.up * 100, -Vector3.up, out hit, 200, putOnTopOfThese);
transform.position = hit.point + Vector3.up;
}
}
要使每个玩家生成在不同的位置,您可以在生成点之间循环。请记住,如果将标记用于生成点而不是MonoBehaviour,则需要使用GameObject.FindObjectsWithTag而不是FindObjectsOfType
用于在不同位置产卵:
private int spawnIndex;
...
void CreatePlayerObject()
{
spawnPoint[] sp = GameObject.FindObjectsOfType<spawnPoint> ();
if(spawnIndex >= sp.length) spawnIndex = 0;
Vector3 position = sp [spawnIndex].transform.position;
GameObject newPlayerObject = Instantiate(player, position, Quaternion.identity);
spawnIndex++;
}
...
对于随机生成:
...
void CreatePlayerObject()
{
spawnPoint[] sp = GameObject.FindObjectsOfType<spawnPoint> ();
int chosen = Random.Range (0, sp.Length);
Vector3 position = sp [chosen].transform.position;
GameObject newPlayerObject = Instantiate(player, position, Quaternion.identity);
}
...
编辑:清晰度