Unity初心者です。2Dカードゲームを作ろうとしていて、PUN2を用いてオンライン対戦を実装しようとしています。
下記の質問で、RPCを使用すれば、UIオブジェクトの親変更の同期ができると教えていただきました。
https://teratail.com/questions/0tju4hfj01runj
RPCを自分なりに調べて実行してみたのですが、うまくいきません。
【したいこと】
・PlayerPanelのネットワークオブジェクトが生成されたら、Canvasオブジェクトの子に入ること。
・他の人が生成したPlayerPanelネットワークオブジェクトも、Canvasオブジェクトの子に入ること
【実際の結果】
・Player(1)のPlayerPanelネットワークオブジェクトはCanvasオブジェクトの子に入っているが、Player(2)は生成されただけで入っていない
・Player(2)側の画面では、Player(1)のオブジェクトは見えていない。
C#
1public class SampleScene : MonoBehaviourPunCallbacks 2{ 3 [SerializeField] Transform canvasObj; 4 private void Start() { 5 Debug.Log("スタート"); 6 // プレイヤー自身の名前を"Player"に設定する 7 PhotonNetwork.NickName = "Player"; 8 // PhotonServerSettingsの設定内容を使ってマスターサーバーへ接続する 9 PhotonNetwork.ConnectUsingSettings(); 10 } 11 12 // マスターサーバーへの接続が成功した時に呼ばれるコールバック 13 public override void OnConnectedToMaster() { 14 // "Room"という名前のルームに参加する(ルームが存在しなければ作成して参加する) 15 PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default); 16 } 17 18 // ゲームサーバーへの接続が成功した時に呼ばれるコールバック 19 public override void OnJoinedRoom() { 20 Debug.Log("Room入室"); 21 // ランダムな座標に自身のアバター(ネットワークオブジェクト)を生成する 22 var position = new Vector3(Random.Range(-300, 300), Random.Range(-300, 300)); 23 var playerPanel = PhotonNetwork.Instantiate("PlayerPanel", position, Quaternion.identity); 24 playerPanel.GetComponent<PlayerPanel>().Init(canvasObj); 25 } 26}
C#
1public class PlayerPanel : MonoBehaviourPunCallbacks 2{ 3 [SerializeField] Text playerName; 4 Transform canvasObj; 5 6 public void Init(Transform canvasTransform){ 7 playerName.text = $"{photonView.Owner.NickName}({photonView.OwnerActorNr})"; 8 canvasObj = canvasTransform; 9 photonView.RPC(nameof(RpcShowInCanvas), RpcTarget.AllBuffered, 1); 10 } 11 12 [PunRPC] 13 private void RpcShowInCanvas(int num) {//引数は使わない 14 this.transform.SetParent(canvasObj); 15 Debug.Log($"{photonView.Owner.NickName}({photonView.OwnerActorNr})は親を変更した"); 16 } 17}
photonView.RPCが実行されていることはLogで確認できていますが、実際の結果を見ると各コンピュータでそれぞれ実行できてないようです。
RPCの使い方がおかしいのでしょうか?
すみませんが、ご教示お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/21 15:08