Проблема возникает потому, что я хочу назначить позицию появления каждому игроку на основе его ActorNumber из предопределенного словаря позиций. Когда игрок уходит и присоединяется другой, новый игрок может получить ранее использованный номер ActorNumber, что может привести к пропуску позиций в последовательности.
Итак, я пытаюсь сделать следующее:Если, например, в фотонной комнате находятся 3 игрока, то согласно логике ActorNumber это будет выглядеть так:
Актер 1 получает ActorNumber 1
Актер 2 получает ActorNumber 2
Актер 3 получает ActorNumber 3
Но если, например, игрок 2 выйдет из комнаты и за ним придет новый игрок, то он будет:
Актер 4 получит ActorNumber 4, но и мне это нужно быть
Актер 4 получает ActorNumber 2, потому что, как я уже сказал, актер 2 отсутствует.
вот код, который я использую:
публичный класс SpawnPlayers: MonoBehaviourPunCallbacks
{
публичный игрок GameObjectPRE;
Код: Выделить всё
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