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