Как обеспечить последовательные идентификаторы игроков в Photon, когда игроки присоединяются или покидают комнату (без пC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как обеспечить последовательные идентификаторы игроков в Photon, когда игроки присоединяются или покидают комнату (без п

Сообщение Anonymous »

Я работаю над многопользовательской игрой, используя Photon в Unity, где игроки присоединяются к комнате и появляются в определенных позициях в зависимости от их номера актера. Однако, когда игрок выходит из комнаты и присоединяется новый игрок, я сталкиваюсь с проблемой, из-за которой идентификаторы игроков (т. е. ActorNumber) не всегда следуют последовательному порядку, что приводит к появлению пробелов в позициях появления (например, Я мог бы получить ActorNumber 1, затем 3, затем 4).
Проблема возникает потому, что я хочу назначить позицию появления каждому игроку на основе его 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»