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

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

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

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

Q&A

解決済

1回答

587閲覧

Unity Bool構文で、プレイヤーが入力した数字と設定した数字があったらTrueを返したいのですが、どうしたらいいですか?

Chibichan

総合スコア72

C#

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

0グッド

0クリップ

投稿2021/05/11 13:30

編集2021/05/12 05:00

以下の構文で、別スクリプトでPublic voidメソッドで出た結果を=にしたいのですが、Voidなので、
どうやったらいいかわかりません。アドバイスお願いします。
answer.Push_Button();とQm.SetupAnswer();は、それぞれ別のスクリプトにありまして、Public voidのメソッドです。Namespaceでこちらへ呼び出しました。answer.Push_Button();が、プレイヤーが入力した数字で、Qm.SetupAnswer();には、スクリプタブルオブジェクトで答えが設定されています。

public class Bottun : MonoBehaviour { [SerializeField] private Text suuji_text; public void Push_Button(int number) { suuji_text.text += number; } internal void Push_Button() { throw new NotImplementedException(); } }
public class QuestionManager : MonoBehaviour { [Header("Questions")] [SerializeField] QuestionDataList[] questionDataLists; [Header("Question UI")] [SerializeField] Text questionText = null; [Header("Question UI")] [SerializeField] Text answerText = null; private int questionNumber; void Start() { SetupQuestion(); } private void SetupQuestion() { questionNumber = Random.Range(0, 81); questionText.text = questionDataLists[questionNumber].GetQuestion(); } public void SetupAnswer() { answerText.text = questionDataLists[questionNumber].GetAnswer(); } public void QuestionButton() { SetupQuestion(); } public void AnswerButton() { SetupAnswer(); } public void ClearText() { answerText.text = ""; } } }
public bool IsAnswerCorrect() { Bottun answer = targetObject1.GetComponent<Bottun>(); QuestionManager Qm = targetObject2.GetComponent<QuestionManager>(); answer.Push_Button();←これと Qm.SetupAnswer(); →これが同じ値ならTrueをかえしたいです。 return true; }

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

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

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

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

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

y_waiwai

2021/05/11 14:19

なにがvoidなんでしょうか。 質問が意味不明です
Chibichan

2021/05/11 16:08

answer.Push_Button();とSetupAnswer();は、別々のスクリプトで、Public void Push_Button()とPublic void SetupAnswer();で、ありまして、それを質問のメソッドへ呼び出しました。Push_Button()メソッドは、プレイヤーが入力した数字をテキストに入力するメソッドで、SetupAnswer()メソッドは、アレイにある数字をインデックス番号で呼び出すメソッドです。目的は、Public void Push_Button()で、プレイヤーが入力した数字とPublic void SetupAnswer();で呼び出したアレイにある数字が一致するかどうかを真偽判定したいのですが、両方Voidなので、==では、できないようで、どうやって、数字が一致するかどうか判定したらいいかわかりません。
sakura_hana

2021/05/12 01:12

該当メソッドがvoidを返すのが問題なら、適切なintを返すようにメソッドを書き換えればいいだけでは?
hogefugapiyo

2021/05/12 01:17

該当ソースコード貼っていただいたほうがよろしいかと思います。 推測で書くなら、「プレイヤーが入力した数字」「アレイにある数字をインデックス番号で呼び出す」ということで比較すべき数値はそれぞれ存在しているはずです。 であるなら、その数値だけを参照して返すメソッドを作ってしまうというのも手かと思います。 public int GetPlayerAnswer() { return プレイヤーの入力した数字; } public int GetArrayAnswerWithIndex(int index) { return array[index]; }
Chibichan

2021/05/12 05:03

皆さま、さまざまご提案ありがとうございます!ソースコードを追加しました。 どうぞよろしくお願いいたします。 intメソッドは、それぞれの構文に追加して、二つを比べる為の構文に呼び出すと言う形でよろしいでしょうか?
guest

回答1

0

ベストアンサー

参照が取れているなら

cs

1 public class Bottun : MonoBehaviour 2 { 3 [SerializeField] private Text suuji_text; 4 public void Push_Button(int number) 5 { 6 suuji_text.text += number; 7 } 8 internal void Push_Button() 9 { 10 throw new NotImplementedException(); 11 } 12 13 // 追加 14 public string GetSuujiText(){ 15 return suuji_text.text; 16 } 17 }

cs

1 public class QuestionManager : MonoBehaviour 2 { 3 [Header("Questions")] 4 [SerializeField] QuestionDataList[] questionDataLists; 5 6 [Header("Question UI")] 7 [SerializeField] Text questionText = null; 8 9 [Header("Question UI")] 10 [SerializeField] Text answerText = null; 11 12 13 14 private int questionNumber; 15 void Start() 16 { 17 SetupQuestion(); 18 } 19 20 private void SetupQuestion() 21 { 22 questionNumber = Random.Range(0, 81); 23 questionText.text = questionDataLists[questionNumber].GetQuestion(); 24 } 25 public void SetupAnswer() 26 { 27 answerText.text = questionDataLists[questionNumber].GetAnswer(); 28 29 } 30 public void QuestionButton() 31 { 32 SetupQuestion(); 33 } 34 public void AnswerButton() 35 { 36 SetupAnswer(); 37 } 38 public void ClearText() 39 { 40 answerText.text = ""; 41 } 42 43 // 追加 44 public QuestionDataList GetCurrentQuestionData(){ 45 return questionDataLists[questionNumber]; 46 } 47 48 } 49}

こんな感じで変数アクセスできるようなゲッターを作った上で答え合わせのときに呼び出したら目的のデータが引っ張ってこれないですかね?(もっとうまいやり方はあると思いますが、とりあえず)

cs

1 public bool IsAnswerCorrect() 2 { 3 Bottun answer = targetObject1.GetComponent<Bottun>(); 4 QuestionManager Qm = targetObject2.GetComponent<QuestionManager>(); 5 //answer.Push_Button();←これと 6 //Qm.SetupAnswer(); →これが同じ値ならTrueをかえしたいです。 7 8 var hoge = answer.GetSuujiText(); 9 var fuga = Qm.GetCurrentQuestionData().GetAnswer(); 10 11 Debug.Log(hoge); 12 Debug.Log(fuga); 13 14 return true; 15 }

投稿2021/05/12 05:37

hogefugapiyo

総合スコア3302

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

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

Chibichan

2021/05/12 08:48

ありがとうございます!何日もてこずっていました!本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問