■概要
UnityとPhotonでオンライン対戦ゲームを作っております。
ゴール時の勝敗判定がうまく行かず、悩んでおります。
■詳細
Player[1]がゴールすると、PunRPCのRpcGoalメソッドを各プレイヤーで実行します。
その際に、ゴールしたプレイヤー名を引数で渡し、勝者を全員に知らせます。
メソッド内で、winner_name変数に勝者のプレイヤー名(Player[1])を代入します。
if文で勝者が誰かを判断し、勝敗表示をしますが、何故かPlayer[2]にも勝利判定がついてしまいます。
ログを確認してもwinner_nameもthis.gameObject.nameも共にPlayer[1]になっていますが、Player[2]も反応してしまいます。
原因がわからず、ご教授いただけますと幸いです。
■ソースコード
※補足
キャラそれぞれに下記のソースコードがついております。
C#
1※省略※ 2 3 private string winner_name = ""; 4 5 void OnCollisionEnter(Collision collision) 6 { 7 //ゴール着地時の処理 ※ここはゴールしたプレイヤーのみ働いてそう 8 if (photonView.IsMine && collision.gameObject.name == "Goal_Floor") 9 { 10 //ゲーム終了フラグが立っていない場合 11 if (totitle_time_frag == 0) 12 { 13 if (winner_name == "") 14 { 15 Debug.Log("ゴールに触れた"); 16 photonView.RPC(nameof(RpcGoal),RpcTarget.All, gameObject.name);//勝利したプレイヤー名を全体に投げる 17 } 18 //再度判定が入らないようにフラグ処理 19 totitle_time_frag = 1; 20 Debug.Log("totitle_time_fragを1に"); 21 } 22 23※省略※ 24 25 [PunRPC] 26 private void RpcGoal(string player) 27 { 28 winner_name = player;//勝者の名前を入れる 29 Debug.Log("勝者は:" + winner_name + " 自身は" + this.gameObject.name); 30 31 //★何故かこれが両者で反応してしまっている。photonView.IsMineをどこかで使う必要がある?不明 32 if (winner_name == this.gameObject.name) 33 { 34 //自身が勝者の場合 35 winorlose_object = GameObject.Find("WinOrLose"); 36 Text winorlose_text = winorlose_object.GetComponent<Text>(); 37 38 // テキストの表示を入れ替える 39 winorlose_text.text = "おめでとう!勝利 10秒後にタイトルに戻ります"; 40 41 } 42 else 43 { 44 //自身が敗者の場合 ここが反応しない 45 winorlose_object = GameObject.Find("WinOrLose"); 46 Text winorlose_text = winorlose_object.GetComponent<Text>(); 47 48 // テキストの表示を入れ替える 49 winorlose_text.text = "残念…あなたの負け 10秒後にタイトルに戻ります"; 50 totitle_time_frag = 1; 51 Debug.Log("敗北時の処理 敗北プレイヤーは" + gameObject.name); 52 } 53 } 54※省略※ 55
回答2件
あなたの回答
tips
プレビュー