Проблема возникает потому, что я хочу назначить позицию появления каждому игроку на основе его ActorNumber из предопределенного словаря позиций. Когда игрок уходит и присоединяется другой, новый игрок может получить ранее использованный номер ActorNumber, что может привести к пропуску позиций в последовательности.
Итак, я пытаюсь сделать следующее:Если, например, в фотонной комнате находятся 3 игрока, то согласно логике ActorNumber это будет выглядеть так:
- Актер 1 получает ActorNumber 1< /li>
Актер 2 получает номер ActorNumber 2 - Актер 3 получает номер ActorNumber 3
Актер 4 получит номер ActorNumber 4, но мне это и нужноАктер 4 получает номер ActorNumber 2, потому что, как я уже сказал, актер 2 отсутствует.
Вот код, который я использую:
public class SpawnPlayers : MonoBehaviourPunCallbacks
{
public GameObject playerPRE;
private Dictionary waitingRoomSpawnPositions = new Dictionary()
{
{1, new Vector3(0, 0, 0)},
{2, new Vector3(0.85f, 0, 1.25f)},
{3, new Vector3(-0.85f, 0, 1.25f)},
{4, new Vector3(-1.7f, 0, 2.5f)},
{5, new Vector3(1.7f, 0, 2.5f)},
{6, new Vector3(0.85f, 0, 3.75f)},
{7, new Vector3(-0.85f, 0, 3.75f)},
{8, new Vector3(0, 0, 2.5f)}
};
public void PlayerSpawn()
{
// int actorNumber = actorNumberManager.AssignActorNumber(); // Assign a unique actor number.
int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber;
Vector3 spawnPosition = Vector3.zero;
if (SceneManager.GetActiveScene().name == "Home")
{
waitingRoomSpawnPositions.TryGetValue(actorNumber, out spawnPosition);
spawnPosition = new Vector3(spawnPosition.x, spawnPosition.y, spawnPosition.z);
PhotonNetwork.Instantiate(playerPRE.name, spawnPosition, Quaternion.Euler(0, 160f, 0));
}
}
public override void OnJoinedRoom()
{
PlayerSpawn();
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -a-room-wi