質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2584閲覧

Unity Photon RPCを使ってオブジェクト同期について

Uto

総合スコア1

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/02 01:57

前提・実現したいこと

現在、オンラインの対戦ゲームを作成中なのですが、RPCについて分からない事があり調べても中々解決しないのでヒントをくれると助かります。

プレイヤーがオブジェクトの玉を攻撃したらその玉が壁に変わる処理で変わった壁を別プレイヤーの画面に表示させたいのですが、RPCを使えばできると思い試しているのですが引数を指定やらエラーがでています。

発生している問題・エラーメッセージ

PhotonView with ID 1002 has no method "OnTriggerEnter" that takes 1 argument(s): Boolean
UnityEngine.Debug:LogError(Object)
NetworkingPeer:ExecuteRpc(Hashtable, Int32) (at Assets/Photon Unity Networking/Plugins/PhotonNetwork/NetworkingPeer.cs:3099)

試したこと

void Update()
{
photonView.RPC("OnTriggerEnter", PhotonTargets.AllBuffered, true);
}

[PunRPC] void OnTriggerEnter(Collider collision) { if (collision.gameObject.tag == ("Tama1") ) { Invoke ("Back1", 10); GameObject.Find ("TamaObject").transform.Find ("Tama1").gameObject.SetActive (false); GameObject.Find ("ItaObject").transform.Find ("Ita1").gameObject.SetActive (true); }

これは一部なのですが、これだと自分の画面だけ玉から壁に変わるけど別プレイヤーの画面には反映されていないって感じです。

補足情報(FW/ツールのバージョンなど)

Unity 2019.2.8f1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーメッセージは名前がOnTriggerEnter、引数1つ、型がBooleanのメソッドがないという意味です。

PhotonView with ID 1002 has no method "OnTriggerEnter" that takes 1 argument(s): Boolean UnityEngine.Debug:LogError(Object)

RPCメソッドの引数は1つ目がメソッド名、3つ目以降がそのメソッドの引数を設定します。
photonView.RPC("OnTriggerEnter", PhotonTargets.AllBuffered, true);は3つ目の引数がtrueなので一致するメソッドがなく呼び出しに失敗しています。

ですがこの引数を修正してもUpdateで毎フレームRPCを呼んでいるので想定した動作にならないはずです。

恐らく以下が想定する処理順序なので

  1. プレイヤーが玉を攻撃(OnTriggerEnter)
  2. RPCで壁に入れ替えメソッドを呼ぶ
  3. 全プレイヤーで壁に入れ替えメソッドを実行する

こうすれば想定した動作になるはずです。

cs

1void OnTriggerEnter(Collider collision) 2{ 3 if (collision.gameObject.CompareTag("Tama1") ) 4 { 5 photonView.RPC(nameof(ReplaceWall), PhotonTargets.AllBuffered); 6 } 7} 8 9[PunRPC] 10void ReplaceWall() 11{ 12 Invoke(nameof(Back1), 10); 13 GameObject.Find("TamaObject").transform.Find("Tama1").gameObject.SetActive(false); 14 GameObject.Find("ItaObject").transform.Find("Ita1").gameObject.SetActive(true); 15} 16

投稿2020/11/03 11:32

編集2020/11/05 04:54
shiena

総合スコア1827

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Uto

2020/11/05 02:38

shienaさん 返事が遅くなってすいません。 上の通りにやってみたら無事反映されました。 CompareTagの使い方がイマイチ分からないとこでしたが勉強してみます。 わざわざありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問