2016-10-25 11 views
0

私のプロジェクトでは、1人目のカメラが1台、mouselook、入力コントローラー、カメラなどの最初の人物のすべてが取り除かれた2台のプレハブがあります。私の究極の目標は、カメラ付きでプレハブを作成し、rpcを送信して、他のすべてのクライアントにダミーのプレハブを作成して、最初の人のプレハブと同期させることです。私が直面している問題は、最初の人のプレハブのPhotonViewからrpcを送信しようとすると、PhotonView IDが他のクライアントにまだ存在しないため、rpcは他のクライアントに呼び出されません。RPCを使用してプレイヤーを起動する

次のコードは、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

+0

RPC onを呼び出したPhotonViewオブジェクトに、添付されたスクリプトの1つにSpawnMyPlayerAsRemoteメソッドがありますか?そうでなければ、そのようなRPCを呼び出すときにログにエラーが発生するはずです。 – photonians

答えて

0

この方法は、テストされ、動作します。

NetworkViewで空のプレーヤーを作成することをお勧めします。

このプレーヤーをPhotonNetwork.Instantiate経由で作成すると、すべてのクライアントの内部でインスタンス化されます。

あなたはnetworkviewの所有者であることを確認してください。 そうであれば、クライアント側のすべての必須事項(FPSカメラなど)を作成します。 そうでない場合は、ダミーを作成します。


編集:私はRPC部分で間違っていました。