使用 RPC 生成我的播放器

Posted

技术标签:

【中文标题】使用 RPC 生成我的播放器【英文标题】:Using RPC to spawn my player 【发布时间】:2016-10-25 14:23:21 【问题描述】:

在我的项目中,我有两个预制件 - 一个带有第一人称相机,另一个去掉了所有第一人称组件,例如鼠标外观、输入控制器、相机等。我的最终目标是生成带有相机的预制件,并发送一个 rpc 以在所有其他客户端上生成虚拟预制件,以与我的第一人称预制件同步。我面临的问题是,当我尝试从我的第一人称预制件的 PhotonView 发送 rpc 时,rpc 不会在其他客户端上被调用,因为 PhotonView id 在其他客户端上尚不存在。

以下代码位于层次结构中空游戏对象上的 NetworkManager 脚本中。

void OnJoinedRoom()
    GameObject MyPlayer = (GameObject) Instantiate (FPSPlayer,spawnPoint.transform.position, spawnPoint.transform.rotation);
    FPSPlayerPhotonView = MyPlayer.transform.root.gameObject.GetPhotonView();
    int id = PhotonNetwork.AllocateViewID ();
    FPSPlayerPhotonView.viewID = id;
    FPSPlayerPhotonView.RPC("SpawnMyPlayerAsRemote", PhotonTargets.OthersBuffered,id, spawnPoint.transform.position, spawnPoint.transform.rotation);


[PunRPC]
void SpawnMyPlayerAsRemote(int id, Vector3 pos, Quaternion rot)
    GameObject MyRemotePlayer = (GameObject)Instantiate (RemotePlayer, pos,rot);
    RemotePlayerPhotonView = MyRemotePlayer.transform.root.gameObject.GetPhotonView();
    RemotePlayerPhotonView.viewID = id;

【问题讨论】:

您调用 RPC 的 PhotonView 对象是否在附加脚本之一中具有 SpawnMyPlayerAsRemote 方法?如果没有,您应该在调用此类 RPC 时在日志中收到错误。 【参考方案1】:

此方法已经过测试,可以使用。

我建议你用 NetworkView 创建一个空播放器。

通过 PhotonNetwork.Instantiate 创建此播放器,以便在所有客户端中实例化。

检查您是网络视图的所有者。 如果您是,请创建所有客户端必需品(FPS 相机等)。 如果不是,请创建虚拟对象。


编辑:我在 RPC 部分错了。

【讨论】:

以上是关于使用 RPC 生成我的播放器的主要内容,如果未能解决你的问题,请参考以下文章

从远程 url 播放音频文件时如何生成音频频谱?

PyDub 从变量播放音频

生成正弦波并在浏览器中播放[关闭]

使用 AVAudioPlayer 播放声音后恢复背景音频

播放生成的声音

如何制作和播放程序生成的啁啾声