我将动画事件链接到我的角色,当角色踩踏时会发出随机的脚步声。我正在尝试将其设置为多人游戏,但出现了一些问题。在一个人的情况下,声音只能播放一次。但是,经过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的检查。