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

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

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

【Unity】相手プレイヤーのスクリプト内の変数が正常に取得できません

araragi_dev
araragi_dev

総合スコア58

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

230閲覧

投稿2022/01/16 15:23

編集2022/01/17 16:02

■概要
相手プレイヤーのスクリプト内の変数が正常に取得できません。
原因がわからないため、お力をおかしください。

■詳細
1対1のオンライン対戦ゲームです。プレイヤー名は、Player[1]とPlayer[2]です。
自分がゴールに触れると、自身のjudge変数に"win"が入ります。
相手のプレイヤーのjudge変数に"win"が入っていた場合、自身の負けとします。
勝敗状況を判断するため、相手のjudge変数をFindとGetComponentでリアルタイムで取得します。

しかし取得が正常に出来ておらず、相手がゴールし、相手のjudgeにwinが代入されても、
自分は相手のjudgeの状態が把握されません。(初期値の取得はできている様子で、永久に空の""のまま)
エラーは出ておりません。

■コード

省略 public GameObject enemy = null; //敵のオブジェクト UnityChan.UnityChanControlScriptWithRgidBody script_enemy = null; //敵のオブジェクトのスクリプト public string judge = ""; //自身の勝敗判定用 win or lose 省略 void Start () {  省略 } void FixedUpdate () {  省略     //★敵がいる場合、敵スクリプトの状態をリアルタイムで取得 if (players.Length == 2) { //自身のチーム名を元に敵プレイヤー名を判断し、enemyオブジェクトに敵のオブジェクトを入れる if (team == "red") { enemy = GameObject.Find("Player[" + 2 + "]"); } else { enemy = GameObject.Find("Player[" + 1 + "]"); } //スクリプトも取得 script_enemy = enemy.GetComponent<UnityChan.UnityChanControlScriptWithRgidBody>(); Debug.Log("script_enemy.judge:[" + script_enemy.judge + "] judge:[" + judge + "]");            //★相手のjudgeにwinが代入されても、何故か検知できない } //勝利時の処理 Goal Collisionでjudgeにwinを代入 if (judge == "win")      { //自身が勝者の場合 winorlose_object = GameObject.Find("WinOrLose"); Text winorlose_text = winorlose_object.GetComponent<Text>(); // テキストの表示を入れ替える winorlose_text.text = "おめでとう!勝利  10秒後にタイトルに戻ります"; } //★ここが作用しない。敵のjudgeが正常に取得できていない。      if(script_enemy.judge == "win")      { //敗北を入力 judge = "lose"; //自身が敗者の場合 winorlose_object = GameObject.Find("WinOrLose"); Text winorlose_text = winorlose_object.GetComponent<Text>(); // テキストの表示を入れ替える winorlose_text.text = "残念…あなたの負け 10秒後にタイトルに戻ります"; totitle_time_frag = 1; Debug.Log("敗北時の処理 敗北プレイヤーは" + team); } } //ゴール着地時の処理 ★接触判定は問題なし if (photonView.IsMine && collision.gameObject.name == "Goal_Floor") { Debug.Log("★触れた"); //ゲーム終了フラグが立っていない場合 if (totitle_time_frag == 0) {   //自身のjudge変数に値が入っていない場合、自身のjudge変数にwinを入れる。loseが入っている場合は処理をスルー。         //ここの判定は問題なし   if (judge == "")   {      judge = "win"; //★ここは自身確かに代入されている      Debug.Log("ゴールに触れた 勝利時の処理 judge:" + judge);   } //再度判定が入らないようにフラグ処理 totitle_time_frag = 1; Debug.Log("totitle_time_fragを1に"); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。