使用RPC生成我的播放器

时间:2016-10-25 14:23:22

标签: unity3d network-programming monodevelop photon

在我的项目中,我有两个预制件 - 一个带有第一人称相机,另一个带有所有它的第一人称组件,例如鼠标,输入控制器,相机等。我的最终目标是在相机上生成我的预制件并发送一个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;
}

damnit, damnit, damnit, damnit, damnit

1 个答案:

答案 0 :(得分:0)

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

我建议您使用NetworkView创建一个空的播放器。

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

检查您是网络视图的所有者。 如果是,请创建所有客户端双面必需品(FPS相机等...)。 如果不是,请创建假人。

编辑:我在RPC部分错了。