PUN 2 Audiosource 多次播放

PUN 2 Audiosource plays multiple times

我有链接到我的角色的动画事件,当他们走动时会播放随机的脚步声。我正在尝试将其设置为多人游戏,但我遇到了一些问题。对于一个人,声音只在他们应该播放的时候播放一次。但是,在对 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();
            }
        }

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

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

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