在我的项目中,我有两个预制件 - 一个带有第一人称相机,另一个带有所有它的第一人称组件,例如鼠标,输入控制器,相机等。我的最终目标是在相机上生成我的预制件并发送一个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;
}
答案 0 :(得分:0)
此方法已经过测试并可以使用。
我建议您使用NetworkView创建一个空的播放器。
通过 PhotonNetwork.Instantiate 创建此播放器,以便在所有客户端内实例化。
检查您是网络视图的所有者。 如果是,请创建所有客户端双面必需品(FPS相机等...)。 如果不是,请创建假人。
编辑:我在RPC部分错了。