使用 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 生成我的播放器的主要内容,如果未能解决你的问题,请参考以下文章