PUN 2 Player появляется заново при каждом присоединении клиента - PullRequest
0 голосов
/ 28 января 2020

У меня проблема, когда игроки возрождаются в точках появления каждый раз, когда в комнату входит новый игрок. Каждый игрок должен перемещаться в точку возрождения только каждый раз, когда он входит в комнату. Это действительно происходит, и это работает. Это также происходит в респауне RP C, но это не вызывается, пока игрок не умер. Если любой новый игрок присоединяется и порождает, любые существующие игроки телепортируются в точку появления (как будто это их первое присоединение). Я пытался проверить локальные фотоны, но это не сработало. Я пытался выяснить, откуда исходит респаун, но я не могу точно определить это. Кажется, что функция каждого игрока Start () выполняется дважды , но это не имеет никакого смысла. Есть идеи, почему это происходит?

Функция запуска игрока:

void Start()
        {
            if (photonView.IsMine)
            {
                SetPlayerTeam(gameInst.specString);
                transform.position = GameManager.instance.spawnPoints[Random.Range(0, GameManager.instance.spawnPoints.Length)].position;
                transform.rotation = GameManager.instance.spawnPoints[Random.Range(0, GameManager.instance.spawnPoints.Length)].rotation;
            }
        }

RP респауна игрока C

void RespawnRPC()
        {
            SetRagdoll(false);

            if (photonView.IsMine)
            {
                transform.position = GameManager.instance.spawnPoints[Random.Range(0, GameManager.instance.spawnPoints.Length)].position;
                transform.rotation = GameManager.instance.spawnPoints[Random.Range(0, GameManager.instance.spawnPoints.Length)].rotation;

                if (!playerProperties.ContainsKey("state"))
                {
                    playerProperties.Add("state", "alive");
                }
                playerProperties["state"] = "alive";
                PhotonNetwork.LocalPlayer.SetCustomProperties(playerProperties);
            }

            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;
        }

1 Ответ

1 голос
/ 28 января 2020

Может быть, вы буферизуете этот вызов RespawnRP C? это объяснило бы.

RP C может быть вызван только вами, поэтому поставьте также отладку, где вы на самом деле вызываете этот RespawnRP C, это, вероятно, также поможет проверить, что ваш код не отправляет больше чем вы ожидаете.

...