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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1320閲覧

【Unity3D】ボタンのフォーカスが出来ない

Y0241-N

総合スコア1066

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/07/04 06:10

編集2019/07/05 06:39

前提・実現したいこと

ver2018.3 project:3D

現在ポイントごとで選択問題を解いていく流れをuGUIを使って作っています。
その中で、結果表示画面の時のみ、スクリプトからボタンフォーカスの処理をしているにもかかわらず
フォーカスされないという問題が発生しています。

この問題を解決し、結果画面が表示されたとき、「手順を終了する」のボタンが選択済み状態になるようにしたいです。

GIFを見ていただけるとわかると思いますが、そのほかの画面では問題なくボタンをフォーカスできています。

試したこと

フォーカスのタイミングや、フォーカスの方法をSelect();もしくはEventSystem.current.SetSelectedGameObject();
に変更してみたり、ボタン自体を正常にフォーカスできているものと入れ替えたりしましたが、
どれも上手くいきませんでした。

強引な方法として、別スクリプトでUpdateの中でSelect();を実行し、そのスクリプトをendsにアタッチするという
手段ではボタンをフォーカスする事が出来ましたが、何度も処理を繰り返す必要がないので
この方法は避けたいと思っています。

ボタンを押したときに使用するスクリプト(必要部分のみ抜粋)

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ResultMgr : MonoBehaviour { GameObject batu; public GameObject ttSelect = null; public GameObject ffSelect = null; Button ed = null; public static Text quiz; GameObject Button1; GameObject Button2; GameObject Button3; public static GameObject ResultMenu; GameObject Again; GameObject Ok; public static Text ans1; public static Text ans2; public static Text ans3; Text quizAns; Text ST; public static int count = 0; public static int Score = 0; string answerText; public void Awake() { batu = ButtonChangeAction.ot; Button1 = GameObject.FindWithTag ("Button1"); Button2 = GameObject.FindWithTag ("Button2"); Button3 = GameObject.FindWithTag ("Button3"); ed = GameObject.FindWithTag ("ed").GetComponent<Button>(); ResultMenu = GameObject.FindWithTag ("Result"); Again = ResultMenu.transform.Find("again").gameObject; Ok = ResultMenu.transform.Find("ok").gameObject; quiz = GameObject.FindWithTag ("FlightText").GetComponentInChildren<Text>(); ans1 = GameObject.FindWithTag ("Button1Text").GetComponentInChildren<Text>(); ans2 = GameObject.FindWithTag ("Button2Text").GetComponentInChildren<Text>(); ans3 = GameObject.FindWithTag ("Button3Text").GetComponentInChildren<Text>(); ST = GameObject.FindWithTag ("ScoreText").GetComponentInChildren<Text>(); } public void CheckAnswer() { count ++; if(quizAns.text == answerText) { Score ++; ButtonChangeAction.tt.SetActive(true); EventSystem.current.SetSelectedGameObject (ttSelect);"この処理ではフォーカスできている" }else { ButtonChangeAction.ff.SetActive(true); EventSystem.current.SetSelectedGameObject (ffSelect); } } public void OverRideAnswer() { Debug.Log("count" + count); Debug.Log("Score" + Score); ButtonChangeAction.tt.SetActive(false); ButtonChangeAction.ff.SetActive(false); ButtonChangeAction.flight.SetActive(true); batu.SetActive(true); switch(count) { case 1~ case4は省略 case 5 : ed.Select(); "←本来ならこの処理でフォーカスされているはず" ResultMenu.SetActive (true); ButtonChangeAction.ot.SetActive (false); ButtonChangeAction.flight.SetActive (false); Debug.Log(ed); //EventSystem.current.SetSelectedGameObject (ed); "上記の処理も試したがフォーカスできず" ST.text = "あなたの成績は \n" + Score +"/"+ count +"\n 正解でした"; if(Score == count) { Debug.Log("OK"); Ok.SetActive(true); Again.SetActive(false); }else { Ok.SetActive(false); Again.SetActive(true); } break; default: break; } } }

###別のスクリプトでUpdateを使い無理やりフォーカスさせる
下のHierarchyの画像でendsにアタッチされているEnd Selectの中身です。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class EndSelect : MonoBehaviour { Button End = null; // Start is called before the first frame update void Update() { End = GameObject.FindWithTag ("ed").GetComponent<Button>(); End.Select(); Debug.Log("lol");"処理確認用のデバッグログ" } }

HierarchyとGIFによる実際の挙動

endsがフォーカスさせたいボタンです。
イメージ説明
GIF画像ではEnd Selectのスクリプトは非アクティブにしています。
イメージ説明

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

Buttonオブジェクトを作成しなおすことで選択できるようになりました。

投稿2019/11/14 07:04

Y0241-N

総合スコア1066

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問