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

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

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

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

Unity

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

解決済

C#(Unity) 代入した変数を他のスクリプトでも使いたい

Ranom
Ranom

総合スコア10

C#

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

Unity

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

2回答

0リアクション

0クリップ

3022閲覧

投稿2019/06/30 13:19

前提・実現したいこと

Unityで4択のクイズゲームを制作しています。
csvファイルを用いて問題と答えを作っています。

上のソースコード(スクリプト)で定めた「問題の正解」を
下のソースコードでも使い、正誤判定しようとしています。

しかし、下のソースコードで参照した際、「問題の正解」に代入した変数がなくなってしまいます。
原因と解決方法を教えていただけると嬉しいです。

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

上の説明だとわかりづらいと思うので、下にある二つのソースコードと併せて、再度実現したいことを説明させていただきます。

上のソースコードの最後で、正しい答えとなるcsvデータ(csvDatas[k][1])をAnswerTextというString型に入れています。

★AnswerText内に代入したテキスト(csvデータ)を別スクリプトのanswerTextにさらに代入したい、という感じです。

<補足>
エラーコードは出ていません。
上のソースコードのAnswerSetメソッド内にあるDebug.Logでは正しく答えのテキストが表示されます。
しかし、下のソースコードのStartメソッド内にあるDebug.Logでは何も表示されず、Answerメソッド内のDebug.Logではnullが表示されます。

uGUIボタンを押すと、下のソースコード内のAnswerメソッドが行われるように設定してあります。

下のソースコードの最後にあるDebug.Log(正解)(不正解)は全て不正解と表示されます。(代入がうまくいっていないため)

該当のソースコード

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System.Linq; public class QuizMgr : MonoBehaviour { public string dataName; public string title; public TextAsset csvFile; public List<string[]> csvDatas = new List<string[]>(); public int height = 0; public int i, j = 0; public int k = 0; internal Text ansLabel; public string AnswerText; const int size = 5; // Start is called before the first frame update void Start() { title = "theme_"; csvFile = Resources.Load("CSV/" + title + dataName) as TextAsset; StringReader reader = new StringReader(csvFile.text); while(reader.Peek() > -1){ string line = reader.ReadLine(); csvDatas.Add(line.Split(',')); Debug.Log("reading:" + height); height++; } for(i=0; i < height; i++) { for(j = 0; j < size; j++){ Debug.Log("csvDatas[" + i + "][" + j + "]:" + csvDatas[i][j]); } } QuestionLabelSet(); AnswerLabelSet(); AnswerSet(); } public void QuestionLabelSet(){ csvDatas[k] = csvDatas[Random.Range(0, 4)]; //特定の名前のオブジェクトを検索してアクセス Text qLabel = GameObject.Find("Quiz/QLabel").GetComponentInChildren<Text>(); //データをセットすることで、既存情報を上書きできる qLabel.text = csvDatas[k][0]; } public void AnswerLabelSet(){ //問題文に対応した答えをそれぞれのuGUIボタンにセット string[] array = new string[]{ csvDatas[k][1], csvDatas[k][2], csvDatas[k][3], csvDatas[k][4]}; //問題文をシャッフル array = array.OrderBy(x => System.Guid.NewGuid()).ToArray(); //ボタンが4つあるのでそれぞれ代入 for(int i=1; i<=4; i++){ Text ansLabel = GameObject.Find("Quiz/AnsButton" + i).GetComponentInChildren<Text>(); ansLabel.text = array[i - 1]; } }   //問題の箇所① public void AnswerSet(){ //答えとなるcsvデータを変数として型に代入する string AnswerText = csvDatas[k][1]; Debug.Log(AnswerText); } // Update is called once per frame void Update() { } }

C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; public class Judge : MonoBehaviour { QuizMgr quizMgr; string answerText; void Start() {    //問題の箇所② quizMgr = GameObject.Find("Script").GetComponent<QuizMgr>(); //QuizMgrスクリプトからAnswerTextを持ってくる string answerText = quizMgr.AnswerText; //中身の表示 Debug.Log(answerText); } //選択したボタンのテキストラベルと正解のテキストを比較して正誤を判定 public void Answer() { //選択したボタンのテキストを取得する Text selectedBtn = this.GetComponentInChildren<Text>(); if (selectedBtn.text == answerText){ Debug.Log("正解"); } else { Debug.Log("不正解"); } } }

試したこと

最初は取り込んだcsvDatasを読み込んで正誤判定しようとしていました。
(選んだボタンのテキストがcsvDatas[k][1]なら正解)
しかし、IndexWasOutOfRangeのエラーがでてしまい、解決できなかったため
今の方法にチェンジしました。(やり方としてはどちらも間違っていないはず?)

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

Unityは2019 1.2fです。
ヒントや推測でもいただけると嬉しいです。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C#

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

Unity

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