PUN 2 Audiosource играет несколько раз - PullRequest
0 голосов
/ 19 января 2020

У меня есть анимационные события, связанные с моими персонажами, которые воспроизводят случайные звуки шагов при шаге. Я пытаюсь настроить его для мультиплеера, но у меня есть некоторые проблемы. С одним человеком, звуки играют только один раз, когда они должны. Тем не менее, как было проверено с 2 людьми, он играет каждый шаг в два раза одновременно, когда один игрок делает шаг. У каждого плеера есть аудиоисточник. Оба звука шагов исходят из аудиоисточника работающего плеера, так что это не тот случай, когда оба плеера воспроизводят одинаковый звук. Есть идеи, почему звук дублируется и воспроизводится одновременно? Двойной звук исходит от одного и того же клиента, но только тогда, когда этот клиент находится в многопользовательском режиме. И это не когда другие люди гуляют, только клиент. Я, должно быть, что-то настраиваю неправильно или помещаю что-то не туда с моим плеером RP C.

1 с 1 аудиоисточником: звуки воспроизводятся один раз

2 проигрывателя со своим собственным аудиоисточником: звуки дублирует и воспроизводит одновременно

2 проигрывателя с включенным аудиоисточником для только одного шага : звуки по-прежнему воспроизводятся дважды

Из кода моего игрока

public void PlayFootstep()
        {
            int clipPick = Random.Range(0, footstepArray.Length);
            GetComponent<AudioSource>().clip = footstepArray[clipPick];
            photonView.RPC("PlayFootstepRPC", RpcTarget.All);
        }

[PunRPC]
private void PlayFootstepRPC()
        {
            if (GetComponent<AudioSource>().isActiveAndEnabled && GetComponent<PlayerMovement>().ySpeed > 1.15)
            {
                GetComponent<AudioSource>().Play();
            }
        }

1 Ответ

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

Если PlayFootstep вызывается через событие анимации, и анимации синхронизируются через PhotonAnimatorView, то PlayFootstepRP C () вызывается несколько раз, один раз для каждого подключенного клиента.

PhotonAnimatorView заставляет объект играть одинаковые анимации на каждом клиенте. Функция PlayFootstep вызывается на каждом клиенте, и каждый клиент отправляет RP C себе и другим клиентам, а RP C воспроизводит звук.

Я предлагаю вам не проигрывать звуки шагов через RP C, вместо этого проигрывая его локально (потому что событие анимации обрабатывает его для вас), или добавьте проверку PhotonView.IsMine перед вызовом RP C.

...