0

我有与我的角色相关联的动画事件,这些事件在他们迈步时会播放随机的脚步声。我正在尝试将其设置为多人游戏,但我遇到了一些问题。对于一个人,声音只会在应该播放的时候播放一次。然而,在 2 人的测试中,当一个玩家迈步时,它会同时播放每个脚步声两次。每个播放器都有一个音频源组件。两个脚步声都来自运行的播放器的音源,所以这不是两个播放器播放相同声音的情况。关于为什么声音被欺骗和同时播放的任何想法?双重声音来自同一个客户端,但仅当该客户端处于多人游戏中时。而且不是其他人走路的时候,只有客户。我的 RPC 必须设置错误或将某些东西放在错误的位置。

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();
            }
        }
4

1 回答 1

1

如果通过动画事件调用 PlayFootstep,并且您通过 PhotonAnimatorView 同步了动画,则 PlayFootstepRPC() 会被调用多次,每个连接的客户端一次。

PhotonAnimatorView 使对象在每个客户端上播放相同的动画。每个客户端都会调用 PlayFootstep 函数,每个客户端都会向自己和其他客户端发送 RPC,然后该 RPC 会播放声音。

我建议您不应该通过 RPC 播放脚步声,而是在本地播放(因为动画事件会为您处理),或者在调用 RPC 之前添加对 PhotonView.IsMine 的检查。

于 2020-01-22T06:24:58.943 回答