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

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

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

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

button

HTMLで用いる<button>タグです。

Unity

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

Q&A

解決済

1回答

538閲覧

先にOn.GUIのボタンを押すとInputFieldが作動しなくなる

YukioMaki

総合スコア21

C#

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

button

HTMLで用いる<button>タグです。

Unity

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

0グッド

0クリップ

投稿2019/07/17 08:20

前提・実現したいこと

GameSystem.scにOnGUI.Buttonを8つ作り、ゲームシーンの8つのボタンのどれかを押すとクローンオブジェクトが数個出るようにしました。
ゲーマーがそのオブジェクトの数を数えてキーボードからその数を打ち込んでゲームシーンに表示出来るように、InputFiedlを作成しました。
*InputFieldのTextでは見にくいので、InpuManager.scを付けてその中にScore Textを作りました。

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

ボタンを押すとオブジェクトは現れるのですが、打ち込んだ数字がゲームシーンに表示されません。

エラーメッセージ InspectorのScoreTextに付けているScoreは0のままの状態。

該当のソースコード

C#

using UnityEngine;

public class GameSystem : MonoBehaviour
{
private bool Flag = false;
public StageSetUp setUp;
public Write prob;
public InputManger ipt;
private int i = 0;

// Start is called before the first frame update void Start() { Debug.Log("G1"); setUp = GameObject.Find("StageSetUp").GetComponent<StageSetUp>(); prob = GameObject.Find("Proglam").GetComponent<Write>(); ipt = GameObject.Find("InputField").GetComponent<InputManger>(); } public void OnGUI() { Debug.Log("G2"); float sizeX = 30; float sizeY = 30; float x = Screen.width / 2 + sizeX * 12; float y = Screen.height / 2 + sizeY * 1; if (GUI.Button(new Rect(x, y + sizeY * 4, sizeX , sizeY),"2")&& Flag == false) { if (i == 8) { } else { setUp.makeStage_1(); prob.Nu_1(); } Flag = true; } if (GUI.Button(new Rect(x, y + sizeY * 5, sizeX, sizeY), "3") && Flag == false) { if (i == 8) { } else { setUp.makeStage_2(); prob.Nu_1(); } Flag = true; i += 1; }

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class InputManger : MonoBehaviour 5{ 6 public InputField inputfield; 7 public Text scoreText; 8 public int score = 0; 9 public bool FF; 10 public string star; 11 // Start is called before the first frame update 12 void Start() 13 { 14 Debug.Log("I1"); 15 FF = false; 16 scoreText.text = " "; 17 inputfield = GetComponent<InputField>(); 18 } 19 20 // Update is called once per frame 21 void Update() 22 { 23 Debug.Log(FF); 24 if (FF== true) 25 { 26 inputfield = null; 27 } 28 } 29 public void InputLonger() 30 { 31 Debug.Log("I3"); 32 string inputValue = inputfield.text; 33 string star = inputfield.text; 34 score = int.Parse(inputValue); 35 Text p = GameObject.Find("Text").GetComponent<Text>(); 36 InitInputField(); 37 score =int.Parse("Text"); 38 FF = true; 39 } 40 void InitInputField() 41 { 42 Debug.Log("I4"); 43 scoreText.text = string.Format(inputfield.text); 44 inputfield.text = " "; 45 inputfield.ActivateInputField(); 46 } 47} 48

が試したこと

InputFieldの紐づけがうまく行ってないのかと思い、逆にゲームの始めにキーボードの数字を打ち込んで見ところ、げーむしーんに数字が表示され、InnspecterのScoreにも数字が入りました。
イメージ説明
スクリプトの実行順が悪いのかと思ってScript Execution Orderを書き換えてみましたが効果はありませんでした。

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

Unity2018.3

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

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

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

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

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

fiveHundred

2019/07/17 08:55

質問とは直接関係ないですが、OnGUI()は古い機能なので使わないほうがよいです。
sakura_hana

2019/07/17 12:08

何がしたいのかよく分かりません。 「Inputfieldに入力された値を別のTextコンポーネントに表示したい」とすると、その為のコードが入っていないので当然動作しません。 InputLongerの「score = int.Parse(inputValue);」の下の行辺りに 「scoreText.text = score.ToString();」 でやりたい動きになりますでしょうか?
YukioMaki

2019/07/17 13:15

回答ありがとうございます。 GUI.Buttonを押す前だとキーボードから入力した数字はゲームシーンに表示されるのですが、Gui.Buttonを押した後に数字を入力しようとすると反応しなくなるんです。
sakura_hana

2019/07/23 04:34

Gui.Buttonを押された時に行われるのは setUp.makeStage_1(); prob.Nu_1(); などですが、該当メソッドで何をしているのか分からないので回答しようがないです。 (この中でエラーが発生しているのかもしれないし、そうでないのかもしれない)
YukioMaki

2019/07/24 00:40

sakura_hanaさん、いつも回答を送ってくださって有難うございます。 setUp.makeStage_1();はstege classに飛んで動画の木のオブジェクトをInstantiateしています。 prob.Nu_1();はwrite classに飛んでTextに6✕8のように問題を出すために使っています。 私の困っているのは、Gui.Buttonを押した後だとInputFieldが作動しなくなる点なんです。*子どもたちが答えを入れれないので 言葉足らずで申し訳ありません。 InputFieldが作動しなくなる理由か、作動させる方法のヒントがあれば教えて頂けると有り難いです。
sakura_hana

2019/07/24 01:33

「InputFieldをクリックしても反応しない(カーソル点滅もしない)」なら、InputFieldの上に何かが被っていてクリック出来ていない状態になっているというのが濃厚かなと思います。(問題表示用Textコンポーネントが全面を覆っていたりしませんか?) 「InputFieldをクリックすると反応する(カーソル点滅する)が、キー入力してもInputField上に文字が表示されない・表示直後に消えてしまう」とかの場合は別のスクリプトがInputFieldを制御しようとしている等の疑いがあります。 単に「作動しなくなる」だと分からないので、発生している現象をより具体的に記述してください。 あと最初にfiveHundredさんが仰っていますが、テスト以外の目的でOnGUIを使用しない方がいいです。 (今回の不具合とは直接関係無いとは思いますが)
YukioMaki

2019/07/24 01:50

Gui.Buttonを押した時にtextがInnputFieldと重なってるかもしません。 これから仕事場なので返ってから確かめて見ます。 有難うございます。
YukioMaki

2019/07/24 10:40

sukura_hanaさん、マウスのクリックで起こるようなんですが、カーソルの点滅が見れるようにして調べたところ、マウスをクリックすると点滅が消えます。 Gui.Buttonを押すのにマウスをクリックするので、これが原因ではと。 これでは修正出来ないのではないですか。
sakura_hana

2019/07/24 10:57

何を言っているのか分かりません。 「いつ」「どこを」マウスでクリックすると「何が」起こるのか、「いつ」「どこを」マウスでクリックするとカーソルの点滅が消えるのか。「具体的」というのはそういうことです。 Unityの基本仕様では「InputField選択中、InputField以外の部分をクリックするとInputFieldが非選択状態になり、文字入力出来なくなる。再度InputFieldをクリックするとInputFieldが選択状態になり文字入力出来るようになる」です。この仕組みは理解されていますでしょうか。 もしここが問題なら、スクリプトから選択状態にも出来るので(以下参照)試してみてください。 https://docs.unity3d.com/ja/current/ScriptReference/UI.InputField.ActivateInputField.html
YukioMaki

2019/07/24 13:51

InputField以外の部分をクリックするとInputFieldが非選択状態になる。 つまり私の九九のゲームだと、ゲーム場のGui.ButtonをクリックするからInputFieldが非選択状態になると言うことですよね。 動画を見てもらえば分かりますがnputFieldで入力した数字はtextに表示して、inputuField自体はゲーム場に映らないようにしてあるので、画面から再度InputFieldをクリックすることはできません。 やはり、修正は無理ではないですか。
sakura_hana

2019/07/25 02:43 編集

前述の通り、「ipt.inputfield.ActivateInputField();」をGameSystemクラス内のボタンクリック後の処理に入れればInputFieldがアクティブになるので動くかもしれません。(試したことないのでちゃんと出来るか分かりませんが) 無理だった場合はInputFieldを表示させるか代替手段を取るかですね。 代替手段案としては、算数の答えを入力するだけなら必要なのは数字だけなので、キー入力判定を自前で作るか、キーボード入力ではなく数字ボタンを押させる形式にしてしまうのもありかもしれません。 以下余談です。 InputFieldを画面上に表示させないということはあまりやらないと思う(表示させない=クリック出来ない=上記のようなスクリプトを書く必要がある)ので、最初からそのように質問内に書いてもらえれば話は早かったかなと思います。動画見ただけだと何を入力しているのか分かりませんでしたし。 恐らくUnityの仕様の把握も十分ではないように思うので、初めて使う機能(例えばInputField)は画面上に表示させて「どうなったら入力可能なのか」を最初に確かめた方がいいと思います。 (「入力欄をクリックしたら入力出来る・クリックしなかったら入力出来ない」はUIとして最早当たり前ではありますが……怪しい挙動があったら「これがUnityとしては正しい仕様で、自分の認識の方が間違っているのでは?」ということをまず疑い、確認すべきかと思います)
YukioMaki

2019/07/25 14:37 編集

報告が遅れてすいません。 sakura_hanaさんが言われたinputfield.ActivateInputField()をがヒントで InputManger.scに void Update() { if (Input.GetMouseButtonDown(0)) { inputfield.ActivateInputField(); }} を付け加えることで、解決出来ました。 本当に助かりました。 有難うございます。
sakura_hana

2019/07/26 00:25

解決出来て何よりです。自己回答して質問クローズをお願いします。
guest

回答1

0

自己解決

sakura_hanaさんが教えてくださった、inputfield.ActivateInputField()を上記に記載したInputManger.scのUpdate()に書き加えることで、inputfieldの非選択状態を選択状態にすることが出来ました。

void Update() { if (Input.GetMouseButtonDown(0)) { inputfield.ActivateInputField(); }}

投稿2019/07/26 13:00

YukioMaki

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問