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

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

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

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

Unity

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

Q&A

解決済

1回答

3057閲覧

非表示にしたボタンを再表示にするときに、なぜか二回押さないと表示されない

Buddha_san2

総合スコア27

C#

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

Unity

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

1グッド

1クリップ

投稿2018/05/11 08:06

編集2018/05/11 09:45

前提

超初心者です。
クイズゲームをUnity,C#で作っています。
選択肢をタッチした後に次の問題に進むためのボタンを設置しました。

問題

回答した後に、正解か不正解が出るのと同時に、次に進むボタンを設置しました。
しかし、二回選択肢をタッチしなければ、ボタンが発生しません。

該当のソースコード

void Start() { //「ボタン」を非表示にする GameObject.Find("Button").gameObject.SetActive(false); }
//選択肢をクリックすると、↓を行います public void JudgeAnswer() { Text answer = this.GetComponentInChildren<Text>(); // 文字列が指定されたいずれかの文字列と等しいかどうかを返す拡張メソッドを使ってます    // 正解の場合 if (answer.text.IsAny("A", "B", "C")) { //「ボタン」を表示させる GameObject.Find("Quiz").transform.Find("Button").gameObject.SetActive(true); }    // 不正解の場合 else { //「ボタン」を表示させる GameObject.Find("Quiz").transform.Find("Button").gameObject.SetActive(true); }

疑問

何が原因で、二回押さないと出てこないかが分かりません。
ここに書いた以外のコードが影響しているのでしょうか?
ヒントでも頂けるのであれば嬉しいです。

質問に対する回答(になっていなければ、すいません)

1.スプリクトにはエラーは表示されていませんが、Unityでテストをすると最初に

NullReferenceException: Object reference not set to an instance of an object QuizMgr.Start () (at Assets/QuizMgr.cs:48)

のエラーが出ます。
2.JudgeAnswerのコードのSetActiveはテストだけでなく、出来るのであればずっと使いたいです(それ以外の方法を知りませんすいません)。
3.「ボタン」をオフするコードは、上の「ボタン」を非表示にする コードのみです。

Quizというシーンの中にQuizというオブジェクトが入っています。
Buttonは別のシーンで同じ名前はありますが、Quizのシーンではこれだけです。
ButtonはQuizの子になってます。

set0gut1👍を押しています

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

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

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

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

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

sakura_hana

2018/05/11 08:44

1.エラーは何か表示されていますか? 2.JudgeAnswerのコードのSetActive、現在両方trueですがこれはテスト用にこうしているという認識でいいですか? 3.別のコードで、ボタンをオフにする機能を使っていませんか?
Buddha_san2

2018/05/11 09:07 編集

質問のところに回答を書きました、よろしくお願いします
sakura_hana

2018/05/11 09:37

追加で質問です。「Quiz」という名前のオブジェクトと「Button」という名前のオブジェクトはそれぞれ複数ありますか? また、ButtonはQuizの子になっていますか?
guest

回答1

0

ベストアンサー

恐らく「GameObject.Find(〜)はそのオブジェクトがオフになっていると取得出来ない」という仕様が問題になっていると思います。
(現時点で何故動いているのかよく分かりませんが)根本的な修正を行うならこんな感じかと。

C#

1public class QuizMgr : MonoBehaviour { 2 //インスペクタにてドラッグ&ドロップで設定してください。 3 public GameObject buttonObj; 4 5 void Start() 6 { 7 //ボタン非表示 8 buttonObj.SetActive(false); 9 } 10 11 public void JudgeAnswer() 12 { 13 Text answer = this.GetComponentInChildren<Text>(); 14 15 if (answer.text.IsAny("A", "B", "C")) 16 { 17 //正解の場合 18 } else { 19 //不正解の場合 20 } 21 22 //正解でも不正解でも表示させるならここでいい 23 buttonObj.SetActive(true); 24 } 25} 26

ちなみに「JudgeAnswerのコードのSetActive、現在両方trueですがこれはテスト用にこうしているという認識でいいですか?」の意図ですが、正解の場合も不正解の場合もtrueだったので「片方falseの間違いかな?(今は動作テストで両方trueにしているのかな?)」と思っただけです。
「次に進むボタン」とのことなので「正解/不正解問わずに表示される」で間違い無さそうなので条件分岐の外にしました。
このままずっと使えるはずなのでご確認ください。

投稿2018/05/11 10:00

sakura_hana

総合スコア11427

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

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

Buddha_san2

2018/05/11 10:11

直りました~!何度トライしても直らなかったので、嬉しさで少し涙目です(笑) 本当にありがとうございます! また初級の質問をするかもしれません、その時はよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問